Может ли другая функция доступа к потоку локально по своему адресу \ Это оптимизация действительна \ Am Am ​​Am ​​AmpoftC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Может ли другая функция доступа к потоку локально по своему адресу \ Это оптимизация действительна \ Am Am ​​Am ​​Ampoft

Сообщение Anonymous »

Представьте себе этот код: < /p>

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;
Когда я скомпилируется его (точная команда -G ++ -O3 -Std = GNU ++ 1y Snippet.cpp -pthread ), получаемому телом функции func отсутствует филиал, где один из ar назначает значение 90. />
Что, если есть еще один поток, работающий в тот момент, ожидая, когда 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»