黑马程序员技术交流社区
标题:
关于加锁
[打印本页]
作者:
冯晓骏
时间:
2013-12-10 21:53
标题:
关于加锁
我们知道多线程操作共享数据需呀加锁CPU与内存交换数据的最小单位为4字节,也就是说共享数据是4个字节或者小于4个字节的时候的操作应该是原子操作,不需要加锁那么加了锁之后,究竟是把锁中的操作变为了原子操作,必须执行完才可以进行下一步进程调度,还是锁住了资源,即使线程调度到其他地方,也没办法进入呢?
作者:
wangchao1686
时间:
2013-12-10 23:13
本帖最后由 wangchao1686 于 2013-12-10 23:18 编辑
原子操作时系统级别的安全性,正如你理解的一样。所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。
如果只有一条语句操作共享数据是没有必要使用同步的。也就没有必要使用锁。我的理解是,锁是锁住了个原子操作。因为可能对共享数据的操作有多条(多个原子操作)。当多个线程同时执行这些操作共享数据的代码是,很有可能造成数据失去安全性。因为某个线程可能执行完某个原子操作就停止了,却没有吧多个原子操作执行完。
当加入了同步机制,把多个原子操作封装在一起锁起来,一个线程取得锁后,执行完锁住的所有的原子操作后,才会释放锁。即使这个线程暂时释放了cpu执行权,但是没有释放锁,其他程序也不能访问这些原子操作。从而保证了共享数据的安全性。老毕视频中关于设置和获取姓名的例子就很好的说明了这一点,建议你看看。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2