社区
英特尔边缘计算技术
帖子详情
多核时代,怎么做到极度精确的互斥
zj53hao
2008-04-28 11:54:31
单核或单个CPU中,对某个变量的访问,在及其微小的瞬间,只能有一个线程访问,所以还好维护对其的读写保护。
但是真正的多核或多个CPU中。每个CPU的瞬间。都是独立的。
会不会存在同一微妙时刻。两个不同核或者不同CPU中的两个线程同时。访问了这个变量。这种情况应该很少出现。有没有这个可能。
如果有这个可能的话。有没有对此的解决或避免的办法?
...全文
281
10
打赏
收藏
多核时代,怎么做到极度精确的互斥
单核或单个CPU中,对某个变量的访问,在及其微小的瞬间,只能有一个线程访问,所以还好维护对其的读写保护。 但是真正的多核或多个CPU中。每个CPU的瞬间。都是独立的。 会不会存在同一微妙时刻。两个不同核或者不同CPU中的两个线程同时。访问了这个变量。这种情况应该很少出现。有没有这个可能。 如果有这个可能的话。有没有对此的解决或避免的办法?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zj53hao
2008-04-30
打赏
举报
回复
如果把自己分解成电子,随着总线听命着CPU指令,到处游荡。 那可能比 张艺谋的 万千壮士还壮观了。
呵呵。
多谢 Intel_WWW的分析。总有一天也深入到CPU内部探下秘。
intel_www
2008-04-30
打赏
举报
回复
[Quote=引用 8 楼 zj53hao 的回复:]
明白,也就是物理上不可能
同一瞬间,两个CPU能同时访问同一块内存区域
。
这就引出多核下CPU还得排队等内存。似乎效率就低了点。
先结贴吧。
[/Quote]
且不说怎么实现,这种操作的语义怎么定义呢?
多核下的CPU并不一定非要排队等待内存,在特定的cache策略下不同的核可以同时访问不同的内存地址空间而无序排队。而且多核上的程序在设计时就要尽量优化,避免不好的内存访问方式。
zj53hao
2008-04-29
打赏
举报
回复
明白,也就是物理上不可能同一瞬间,两个CPU能同时访问同一块内存区域。
这就引出多核下CPU还得排队等内存。似乎效率就低了点。
先结贴吧。
intel_www
2008-04-29
打赏
举报
回复
lz真正的问题实际上是如何实现同步对象,6楼的回答是正确的答案。
overcomeunicom990702
2008-04-29
打赏
举报
回复
[Quote=引用 3 楼 zj53hao 的回复:]
上面说的解决方案,是针对单核多线程的吧。,
我这里所说的是多核(或多CPU)下的极端情况。有没有这种可能性。
信号量和锁,也都是一个存储对象。 在单核下,无论怎么样。最后也只能是一个线程在一瞬间到达这里。所以可以用他们来解决,线程同步的问题。
我这里假设的是,多核下的某一瞬间恰好两个CPU核中两个不同的线程刚好,同时锁住了一个信号量。 这里的同时。就是真正的同时。 这种情况应该算极端了。 用来同步的信…
[/Quote]
在mp环境中,就是使用各种同步原语来保证对共享数据的互斥访问,比如mutex/semaphore/file lock等等
深入其底层,多是使用了lock prefix,lock prefix是锁住总线,并在下一条汇编指令执行完后失效,锁住总线的作用--使得该 CPU对内存具有惟一的访问权限,其它CPU不能访问内存,这时候我们独占法对计数器的值进行修改,从而达到互斥的作用,可以从tag中搜索一把lock prefix
liangyi571
2008-04-29
打赏
举报
回复
“多核下的某一瞬间恰好两个CPU核中两个不同的线程刚好,同时锁住了一个信号量。”
这个情况不可能发生吧,会有总线仲裁机制来避免的,队员可以有22个,主裁判只有一个。至于变量冲突会经常发生,要看程序怎么写了。
intel_www
2008-04-28
打赏
举报
回复
这就是多线程编程中常见的数据竞争。解决的办法就是使用各种同步对象,比如锁,信号量等实现对共享数据的互斥访问。
zj53hao
2008-04-28
打赏
举报
回复
其实这个问题,现实中应该基本不会出现这种变态情况,估计只有做这种极端实验的科学家才会碰上。
所以解决与否。不是很重要。 我们只要处理常态下的多线程同步和互斥。
感谢两位专家的提醒。暂不结贴,看看有没有其他的高论。
zj53hao
2008-04-28
打赏
举报
回复
上面说的解决方案,是针对单核多线程的吧。,
我这里所说的是多核(或多CPU)下的极端情况。有没有这种可能性。
信号量和锁,也都是一个存储对象。 在单核下,无论怎么样。最后也只能是一个线程在一瞬间到达这里。所以可以用他们来解决,线程同步的问题。
我这里假设的是,多核下的某一瞬间恰好两个CPU核中两个不同的线程刚好,同时锁住了一个信号量。 这里的同时。就是真正的同时。 这种情况应该算极端了。 用来同步的信号量本身,被两个不同的线程同一瞬间控制了。
intel_jeff
2008-04-28
打赏
举报
回复
补充一点,Intel Thread Checker是个很好的工具,帮助你发现类似的多线程编程方面的问题,比如数据竞争、死锁等。
JUC并发集合-Java Fork/Join
在
多核
处理器
时代
,充分利用计算资源已成为提升应用性能的关键因素。然而,编写高效的并行程序一直是软件开发中的难题。开发者不仅需要考虑如何合理拆分任务,还要处理线程同步、负载均衡等复杂问题。Java作为企业级...
1 Studying《Computer Architecture A Quantitative Approach》5-7
不幸的是,缓存共享数据引入了一个新问题。由于两个不同处理器对内存的视图是...因此,在某个级别的缓存可能是共享的
多核
系统中(例如,L3),尽管某些级别是私有的(例如,L1和L2),一致性问题仍然存在并且必须解决。
JavaScript 运行机制(EventLoop)详解:一篇文章全部搞懂事件循环
因为浏览器是单线程的,试想一下,当我们发出异步请求的时候,阻塞了,后面的代码都不执行了,那页面可能出现长时间白屏,
极度
影响用户体验。所以JS采取了"异步任务回调通知"的模式,而实现这个“通知”的,正是事件...
呕心沥血4w代码: 史上最全C语言大厂面试(第二部分)、面经必备八股文、高频考点大总结大梳理)进程、线程、文件io、操作系统、网络编程、系统安全、面试串讲
在多进程与多线程部分,详解了进程与线程的区别、进程间通信机制(管道、消息队列、共享内存等)、线程同步工具(
互斥
锁、条件变量)以及死锁的四大必要条件。文件I/O章节对比了缓冲与非缓冲I/O,阐述了文件描述符...
CppCon 2014 学习:Adventures in Updating a Legacy Vintage Codebase
你面对的是高复杂度、高耦合、高保真要求跨语言、跨平台的技术债不可随意更改的历史包袱(认证、航管标准、硬件适配)模拟的
精确
性要求极高(需要
精确
再现硬件行为改动需最小化风险(尤其在航空、国防等安全关键领域...
英特尔边缘计算技术
567
社区成员
7,024
社区内容
发帖
与我相关
我的任务
英特尔边缘计算技术
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
复制链接
扫一扫
分享
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章