免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1944 | 回复: 6
打印 上一主题 下一主题

spinlock 的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-02 13:23 |只看该作者 |倒序浏览
大家好,问个 spin_lock 的问题。

    在我的 Driver 里面存在一个全局变量 global_A

    为了保证数据的一致,所以采用互斥操作,在访问 global_A 时,我会进行“加锁” 与 “解锁”操作,采用 spin_lock_irqsave 与 spin_unlock_irqrestore

    有这样一种情况:

    func_B()
    {
           // 对全局变量进行操作(读或写)     问题:func_B 只有 func_A 来调用,那么 fun_B 中应该不用 lock 与 unlock 操作了吧?
    }

     func_A()
     {
            spin_lock_irqsave ;
            
            // 对全局变量进行一些操作

            func_B() ;                          --> 调用 func_B

             spin_unlock_irqrestore ;
     }

论坛徽章:
0
2 [报告]
发表于 2009-11-02 15:28 |只看该作者
没人回答吗?

论坛徽章:
0
3 [报告]
发表于 2009-11-02 22:08 |只看该作者
如果function B 再spinlock,会死的。

论坛徽章:
0
4 [报告]
发表于 2009-11-05 00:16 |只看该作者

回复 #1 qiangqiang02 的帖子

spin_lock_irqsave  这个函数杀伤力很大,如果不是在中断上半部来处理这个全局变量,就没有必要用这个函数。
题外话。

你说的这个问题,典型的是设计不合理
functionA根本就没有必要知道functionB是如何处理这个全局变量的,(权责明确),所以functionB要处理全局变量的话,必须自己加锁,否则哪天functionB被其他函数条用了,而那个函数正好又没有负责加锁,那么就会出错了。
所以functionA只要保证自己处理对这个全局变量就好了,functionB也自己处理就对了。
设计如下:
func_A()
     {
            spin_lock_irqsave ;
            
            // 对全局变量进行一些操作

            spin_unlock_irqrestore ;

            func_B() ;                          --> 调用 func_B

        
     }

func_B()
     {
。。。。。。。。。
            spin_lock_irqsave ;
            
            // 对全局变量进行一些操作

            spin_unlock_irqrestore ;
。。。。。。。。。
        
     }

[ 本帖最后由 fantry_t 于 2009-11-5 00:19 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-11-06 13:42 |只看该作者

回复 #4 fantry_t 的帖子

楼上的建议很好,我这样涉及的思路的确很不清晰,乱七八糟的感觉。

但是,当存在这样的需求时,您又该如何设计?


fun_A()
{
         // 执行自己的事情1

         // 调用 fun_B

         // 执行自己的事情2
}

fun_B()
{
}

请问这个时候又该如何加锁?


总不能这样吧:

fun_A()
{
    lock() ;
    // 执行事情1
    unlock

    fun_B() ;

    lock() ;
    // 执行事情2
    unlock() ;
}

fun-B()
{
    lock() ;
    // B 做的事情
    unlock() ;
}

论坛徽章:
0
6 [报告]
发表于 2009-11-08 09:49 |只看该作者

胡说一把

谁加锁有个约定就好吧
不一定那么绝对

如果C的编译器能用像JAVA的annotation一样的机制,控制编译器如何做静态检查就爽了


不过这里的有位编译器高手好像很蔑视java

论坛徽章:
0
7 [报告]
发表于 2009-11-09 14:59 |只看该作者
希望大家能继续解答我的问题,现在还未得到较为全面的答案
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP