多核时代,怎么做到极度精确的互斥

zj53hao 2008-04-28 11:54:31
单核或单个CPU中,对某个变量的访问,在及其微小的瞬间,只能有一个线程访问,所以还好维护对其的读写保护。
但是真正的多核或多个CPU中。每个CPU的瞬间。都是独立的。

会不会存在同一微妙时刻。两个不同核或者不同CPU中的两个线程同时。访问了这个变量。这种情况应该很少出现。有没有这个可能。

如果有这个可能的话。有没有对此的解决或避免的办法?
...全文
281 10 打赏 收藏 转发到动态 举报
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楼的回答是正确的答案。
  • 打赏
  • 举报
回复
[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是个很好的工具,帮助你发现类似的多线程编程方面的问题,比如数据竞争、死锁等。

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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