thread1 (func): < /strong> < /p>
Код: Выделить всё
#include
#include
struct t_arr
{
int _[2];
} *volatile pvar = nullptr;
volatile bool var1;
void func(bool x, t_arr ar)
{
pvar = &ar;
(x ? ar._[0] : ar._[1]) = 90; //this whole statement optimized out
while(!var1);
}
typeof(func) *pFunc = func;
Что, если есть еще один поток, работающий в тот момент, ожидая, когда Pvar < /code> будет назначено значение: < /p>
thread2 (func2): < /strong> < /p>
>void func2()
{
while(!pvar); //wait until 'pvar' is assigned
printf("%d %d\n", pvar->_[0], pvar->_[1]); //print it members
var1 = true; //continue 'func'
}
< /code>
Пример код Создание вышеуказанной ситуации: < /p>
int main () {
using namespace std;
thread newthread(func2);
pFunc(true, {2, 9});
newthread.join();
return 0;
}
< /code>
Все вышеперечисленные фрагменты, скопированные один за другим, создают один исходный файл (snippet.cpp< /code>). < /p>
Если не для каждого отдельного фрагмента кода - поговорите обо всей программе, которая намерена очевидна.2 9
< /code>
Редактировать: исправлено - Забыли присоединиться. < /p>
Подробнее здесь: https://stackoverflow.com/questions/360 ... mization-v
Мобильная версия