A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯晓骏 中级黑马   /  2013-12-10 21:53  /  774 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我们知道多线程操作共享数据需呀加锁CPU与内存交换数据的最小单位为4字节,也就是说共享数据是4个字节或者小于4个字节的时候的操作应该是原子操作,不需要加锁那么加了锁之后,究竟是把锁中的操作变为了原子操作,必须执行完才可以进行下一步进程调度,还是锁住了资源,即使线程调度到其他地方,也没办法进入呢?

1 个回复

倒序浏览
本帖最后由 wangchao1686 于 2013-12-10 23:18 编辑

原子操作时系统级别的安全性,正如你理解的一样。所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。

如果只有一条语句操作共享数据是没有必要使用同步的。也就没有必要使用锁。我的理解是,锁是锁住了个原子操作。因为可能对共享数据的操作有多条(多个原子操作)。当多个线程同时执行这些操作共享数据的代码是,很有可能造成数据失去安全性。因为某个线程可能执行完某个原子操作就停止了,却没有吧多个原子操作执行完。

当加入了同步机制,把多个原子操作封装在一起锁起来,一个线程取得锁后,执行完锁住的所有的原子操作后,才会释放锁。即使这个线程暂时释放了cpu执行权,但是没有释放锁,其他程序也不能访问这些原子操作。从而保证了共享数据的安全性。老毕视频中关于设置和获取姓名的例子就很好的说明了这一点,建议你看看。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马