【发布时间】:2014-12-12 01:39:02
【问题描述】:
我想用多个线程操作基于树的数据结构,并用互斥锁保护每个节点。 目标架构有数百个线程并在(虚拟)共享内存上运行。
如果 CPU 1 在要操作的节点上获得锁,这种状态互斥锁的更改是否会主动传达给所有其他内核,或者仅在请求时传达?
我假设与共享变量的所有其他更改一样,互斥锁更改被写入主内存。其他 CPU 的缓存根据其策略失效和替换。互斥锁的值只有在另一个 CPU 想要锁定它或者如果他们的缓存替换策略从内存中加载它时才会被另一个 CPU 访问。
这是正确的,还是互斥体被区别对待并立即广播或在请求之前保留? 我想避免每次锁定节点时使数百个缓存失效。 This question 表示每次使用互斥体时都会锁定总线,这似乎没有问题。
编辑
我问的是 GCC 4.8 实现的 C++11 互斥锁。 (据我所知,英特尔编译器还使用 GCC 库来处理与 C++11 规范有关的任何事情。) 我担心的是开销而不是正确性。
【问题讨论】:
-
您是在询问具体的互斥锁实现吗?
-
谢谢,我忘了说。已编辑的问题。
标签: c++ multithreading mutex multicore