void foo(volatile int& a, volatile int& b, bool threadOne) {
if (threadOne) {
//EDIT: switched the following two lines
b = 10;
a = 5;
} else {
while(a == 0);
cout << a << b;
}
}
//somewhere else
int a = 0;
int b = 0;
std::thread th1(foo, a, b, true);
std::thread th2(foo, a, b, false);
Это безопасно на x86, то есть каждый законный чередование инструкций в соответствии со стандартом C++ и ссылкой x86 будет печатать «510»? Моя гипотеза заключается в том, что она на самом деле безопасна.Безопасно ли защищать переменную с другой переменной?
Я не думаю, что слово «безопасно» на самом деле означает что-либо, и вы уверены, что не определяли его, поэтому -1 для этого. Ваш код имеет неопределенное поведение в отношении C++. –
«Является ли это безопасным на x86, то есть каждый законный чередование инструкций в соответствии со стандартом C++ и ссылкой x86 будет печатать« 510 »?» Разве это не определение? – ben
@KerrekSB: Безопасно определенно [делает] (http://en.wikipedia.org/wiki/Thread_safety) означает что-то в многопоточном контексте, поэтому вопрос помечен как «многопоточность». – wolfPack88