免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zylthinking
打印 上一主题 下一主题

为什么用户空间程序不用考虑内存屏障? [复制链接]

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
21 [报告]
发表于 2011-10-14 16:23 |只看该作者
回复 5# asuka2001


   
基本原理概括为两句话:
1) CPU2若看到CPU1执行了某条指令,则必可看到CPU1中这条指令之前的所有指令。
2) CPU3若看到CPU2执行了某条指令,而此时CPU2若看到CPU1执行了某条指令,则CPU3必可看到CPU1中的这条指令。该原则递归。



另外啊,可别引用我的帖子了,我说的不够好。


这两句话的详细准确解释,在arm architecture reference manual ARM-v7a中,里边有解释dmb这个同步指令的段落。

他们不叫“看到”,而是叫“observed”,并对何为observed进行了解释; 然后将所有访问分成GROUP A和GROUP B,进行了全面的讨论。

大意就是这两句话的意思,但是显然人家说的更全面和准确

论坛徽章:
0
22 [报告]
发表于 2011-10-14 16:50 |只看该作者
回复 20# zylthinking


    加锁啊。在用户态这样写多线程就等于是bug。没有商量的余地。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
23 [报告]
发表于 2011-10-14 16:50 |只看该作者
进程切换的时候,必然是需要一个同步点的,这是一个一般原则。

multipul processor memory consistency  ...
塑料袋 发表于 2011-10-14 16:09


就是说, 由操作系统保证内存屏障???

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
24 [报告]
发表于 2011-10-14 16:53 |只看该作者
本帖最后由 zylthinking 于 2011-10-14 16:55 编辑
回复  zylthinking


    加锁啊。在用户态这样写多线程就等于是bug。没有商量的余地。
ruslin 发表于 2011-10-14 16:50



为什么是bug, 就用户空间程序员的观点:
ptr->enable = 1 是在 ptr->buf = malloc() 后执行的;
那么在另一个线程中,  if(ptr->enable == 1) 可肯定 ptr->buf 不是 0 了, 有问题吗, 为什么一定要锁呢?

如果是bug, 那么单CPU debug版本下, 你能否举出一个 crash 的情景出来

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
25 [报告]
发表于 2011-10-14 17:27 |只看该作者
草,我写了半天,争取能回答你那三个问题

结果由于现在在华为这个地方出差,不知怎的把我网络重置了,靠,写的那些没有了。



等周日再写吧,我下班了,现在要去东莞了。

论坛徽章:
0
26 [报告]
发表于 2011-10-14 17:28 |只看该作者
本帖最后由 ruslin 于 2011-10-14 17:30 编辑

回复 24# zylthinking


》》》》    ptr->enable = 1 是在 ptr->buf = malloc() 后执行的;
没有内存屏障,为什么enable已经等于1的时刻,ptr->buf指针就一定会赋值了呢?

这时另外一个线程在其他cpu上访问这个buf就是野指针段错了。

有问题吗?


不管你信不信,就用户态编程原则来说,还真的要加锁。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
27 [报告]
发表于 2011-10-14 17:33 |只看该作者
本帖最后由 zylthinking 于 2011-10-14 17:37 编辑
回复  zylthinking


》》》》    ptr->enable = 1 是在 ptr->buf = malloc() 后执行的;
没有内存屏障 ...
ruslin 发表于 2011-10-14 17:28


你拿我的问题反过来问我, 算是啥意思???
我就是注意到这种情况才有疑问的, 问题是事实上, 这个到底是不是一个问题???
我觉得不是, 因为我所说的用户层程序员的观点应该代表了现在大部分普通程序员观点, 如果这是个问题, 那么估计早就暴露出来了
如果不是, 那么肯定在某个地方存在着内存屏障这样的东西, 那么这个东西在什么地方

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
28 [报告]
发表于 2011-10-14 17:36 |只看该作者
草,我写了半天,争取能回答你那三个问题

结果由于现在在华为这个地方出差,不知怎的把我网络重置了,靠 ...
塑料袋 发表于 2011-10-14 17:27



呵呵, 静候佳音

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
29 [报告]
发表于 2011-10-14 18:08 |只看该作者
回复 21# 塑料袋

不管怎么说,您的帖子让人受益非浅,十分感谢!

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
30 [报告]
发表于 2011-10-14 18:16 |只看该作者
回复 24# zylthinking


    这种程序员不够格写多线程程序吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP