lock-free CAS InterlockedCompareExchange volatile 疑问讨论

Rain7758 2011-03-03 08:04:07
疑问:

1,在多核或者多 CPU 系统下,即使原子操作也可能并行?

2,接上,在多核或者多 CPU 系统下,lock-free 是不是废了?或者必须保证操作的变量在内存中,才能互斥?

3,接上,使用 InterlockedCompareExchange 实现 lock-free 是不是必须申明共享变量为 volatile?

4,接上,即使 volatile 避免了寄存器,但是 cache 中的副本呢?InterlockedCompareExchange 保证会刷新(另一cpu的cache)吗?

我自己的看法:
1,并行
2,应该必须保证在内存
3,必须申明为 volatile
4,cache 的一致性由 cpu 保证
...全文
101 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rain7758 2011-03-04
  • 打赏
  • 举报
回复
谢谢楼上的,看了win核心编程,四个问题都有解
MD,又被铺天盖地的滥用术语误导了
单 CPU 实现 lock-free 的核心可以叫做“原子操作”
多核或者多 CPU 实现 lock-free 只能靠“原子访问”

我的回答都是对的
第3个问题win核心编程有特例:如果保证用指针访问则无需volatile
(作者有误导读者嫌疑,访问者未必“一直”用指针吧?)
smwhotjay 2011-03-03
  • 打赏
  • 举报
回复
你的问题,看win核心编程.多线程同步.讲的很详细.

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧