Есть ли какая-либо гарантия со стороны какого-либо общепринятого стандарта (ISO C или C ++ или любой из спецификаций POSIX / SUS), что переменная (возможно, помеченная как изменчивая), не защищенная мьютексом, к которой осуществляется доступ несколькими потоками, в конечном итоге станет согласованной если это назначено?
Чтобы предоставить конкретный пример, рассмотрим два потока, совместно использующих переменную v с начальным значением ноль.
Поток 1: v = 1
Поток 2: while (v == 0) yield ();
Гарантированно ли завершение потока 2 в конечном итоге? Или он может вращаться вечно, потому что когерентность кеша никогда не срабатывает и делает назначение видимым в кэше потока 2?
Я знаю, что стандарты C и C ++ (до C ++ 0x) вообще не говорят о потоках или параллелизме. Но мне любопытно, гарантирует ли это модель памяти C ++ 0x, pthreads или что-то еще. (По-видимому, это действительно работает в Windows на 32-битной x86; мне интересно, на что можно положиться в целом, или это просто работает там).