6

我目前正在使用 openMP 编写在多核节点上运行的代码。openMP 有一个特定的内存模型,它保证在获得锁时,运行在不同内核上的线程之间的内存是同步的。

我考虑使用 C++11 构造(std::threadwith std::mutexand std::lock)而不是 openMP(因为它们具有更大的灵活性)并且想知道处理器之间的内存同步是否/如何保证?如果没有,我该如何执行?

4

1 回答 1

10

std::mutex该标准在 §30.4.1.2[thread.mutex.requirements.mutex]/6-25 中对 的同步做出以下保证

表达式 m.lock() 应格式正确并具有以下语义

同步:同一对象上的先前解锁()操作应与此操作同步。

而且,同样,

表达式 m.unlock() 应格式正确并具有以下语义

同步:此操作与获得同一对象所有权的后续锁定操作同步。

(其中“同步”是 $1.10 中解释的一个特定术语,尽管通过阅读C++ Concurrency In Action更容易理解)

于 2012-06-08T13:52:28.613 回答