免费注册 查看新帖 |

Chinaunix

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

8.kernel synchronization introduction [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-26 23:39 |只看该作者 |倒序浏览

    共享数据总是需要保护的。不论是对单处理器系统还是SMP系统,不论内核是否可以抢占,理由是显而易见的。临界区,竞争,同步的概念也不需要再多说。
    原子操作,加锁是同步的基本方法。原子操作比较适合数据访问比较简单的场合,比方说增加或者减少一个计数器,甚至上锁/解锁本身也应该是原子的操作。
锁是自愿的非强制的,也就是说总是可以不加任何限制的访问数据,但是造成的后果必须自己承担,如果承担的起的话。
    锁针对的对象应该是数据,而不是代码,虽然临界区本身指的是代码,但一个线程是否可以进入临界区是要检查所访问的数据是否被锁住而不是这段临界区是否被锁住,如果数据被锁住,线程就要堵塞,自然也就不会进入临界区,但并不是把临界区锁住了,如果把临界区锁住了,那么别的线程如何执行这段代码?在概念上这里是不应该混淆的。
    既然有锁,自然就有死锁。死锁的概念和造成死锁的原因无需赘述。避免出现死锁大体上会有几个原则:总是按照一定的顺序申请锁,锁的释放顺序一般来说无关;如果申请锁失败,则需要释放已经持有的锁;避免多次申请同一把锁,因为不是所有的锁都是可以嵌套使用的。
    最后,锁是串行化访问数据的一个工具,因此在某些情况下会是系统性能的瓶颈。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/10080/showart_1745542.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP