日志文章

2007年01月28日 20:51:28

互斥锁的使用注意事项

     这两天联调程序常会遇到一些难以定位,又很难解决的问题。其中代表的就是互斥锁使用问题,这种错误的发生有的时候会随程序执行路径的不同结果也会有很大出入。


    自己遇到过的典型的错误用法:


    1、在while循环中用锁:


     while(1){


     pthread_mutex_lock(&lock);


    .........


    pthread_mutex_unlock(&lock);


     }


    如果程序在其他地方也用到该锁,将会出现无法竞争到锁资源的可能,修改办法就是在解锁之后,加上一句sleep(n),让他睡上若干秒。


    2、更常见的错误,是在程序跳转或return的时候一定记得解锁,否则锁资源始终占用,就会出现阻塞现象。这一点初学者几乎都犯过,虽然知道这条规矩,还是很难避免。


    3、另外在加锁的时候,要考虑锁范围的力度大小问题,看到有人编程,进函数马上加锁,知道函数退出前才解锁,这样加锁,莫不如在函数外部加锁了。当然具体情况要根据需要。


   

Tags: 互斥锁  

类别: linux开发 |  评论(2) |  浏览(3830) |  收藏
2楼 [匿名]123 2007年12月29日 10:39:52 Says:
同感
1楼 [匿名]123 2007年12月29日 10:39:47 Says:
同感
发表评论