boost ::线程和内存模型

时间:2011-07-15 15:44:47

标签: boost-thread

假设我有一些锅炉板多线程代码,例如如下。我想知道使用该代码的多个线程将始终看到状态的当前版本的保证(如果有的话)。我知道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)
    }
};

1 个答案:

答案 0 :(得分:1)

Mutex锁定/解锁意味着内存屏障。 (虽然我在boost :: mutex文档中找不到这个,但我保证在Boost中依赖的每个互斥实现的文档中都有说明。)

此代码没问题。