Фактическая проблема заключается в том, что я пытаюсь отправить новый параметр в текущую нить. Идея заключалась в изменении переменной в потоке, которая не сработала. Код должен показать простой пример проблемы. Распечатка теста переменной должна быть 1 после обновления, но она всегда 0. Кто-нибудь понимает проблему и может помочь? Спасибо большое!Обновление переменной потока (C++)
#include <iostream>
#include <thread>
class MyThread {
public:
int test = 0;
void operator()() const {
while (1)
std::cout << test << std::endl;
}
/* other public or private class members */
};
int main() {
MyThread mythread;
std::thread t(mythread);
mythread.test = 1;
t.join();
return 0;
}
Компилятор может видеть, что ваша тестовая переменная не изменяется в ходе метода, поэтому она хранится в регистре и пытается сделать ее изменчивой: volatile int test = 0; – Mehdi
Это называется * расходом данных *. Ваш код имеет неопределенное поведение. Программирование с параллелизмом является тонким и требует большой осторожности. –