Предположим, у меня есть немного многопоточного кода на плите котла, например как ниже. Мне было интересно, какие гарантии (если таковые имеются) существуют, что несколько потоков, использующих этот код, всегда будут видеть текущую версию состояния. Я знаю, что C ++ гарантирует очень мало о модели памяти, и я думаю, что где-то читал, что даже объявление состояния volatile может не помочь. Тем не менее, на практике люди с удовольствием используют boost :: thread, и его документация не сопровождается большим предупреждением о том, что мьютексы бесполезны, если вы не используете только внешнее состояние :-) Я предполагаю, что за кулисами должна быть какая-то магия, которую Boost делает за кулисами , или я должен вызывать __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)
}
};