假设我有一些锅炉板多线程代码,例如如下。我想知道使用该代码的多个线程将始终看到状态的当前版本的保证(如果有的话)。我知道C ++对内存模型的保证很少,我想我在某处读到甚至声明状态volatile也可能无济于事。然而在实践中,人们很乐意使用boost :: thread,并且它的文档没有大声警告说除非你只使用外部状态,否则互斥体没用:-)我假设必须有一些魔法可以在幕后提升,或者我每次做什么都应该调用__sync_synchronize()?
class Blah {
typedef (some horribly complex data structure) State;
State state;
boost::mutex m;
(...)
void use ()
{
boost::lock_guard<boost::mutex> dummy (m);
(do something to state, being especially careful to maintain invariants)
}
};
答案 0 :(得分:1)
Mutex锁定/解锁意味着内存屏障。 (虽然我在boost :: mutex文档中找不到这个,但我保证在Boost中依赖的每个互斥实现的文档中都有说明。)
此代码没问题。