Здравствуйте!
Если я правильно понимаю статическая переменная класса т.к она находиться на стеке, должна быть у каждого потока своя, и изменение этой переменной в одном потоке не должно изменять её значение в другом. Тогда почему работает представленный код? Смысл этого кода заключается в том, что при изменении статической переменной flag класса SomeClass на true, в других потоках происходит выход из цикла по условию. Но ведь изменение статической переменной в одном потоке не должно влиять на её значение в другом?
Заранее спасибо.
#include <thread>
#include <mutex>
#include <iostream>
#include <locale>
using namespace std;
mutex printMutex;
#define PRINT(text) { lock_guard<mutex> guardPrintMutex(printMutex); cout<<text<<endl;}
class SomeClass
{
public:
static bool flag;
};
bool SomeClass::flag = false;
void main()
{
setlocale(LC_ALL, "Russian");
thread th1([]()
{
PRINT("Первый поток начат");
for (int i = 0; i < 100000; i++)
{
if (i == 99999)
{
SomeClass::flag = true;
PRINT("Первый поток завершён.");
}
}
});
thread th2([]()
{
PRINT("Второй поток начат");
while (true)
{
if (SomeClass::flag)
{
PRINT("Второй поток завершён.");
break;
}
}
});
thread th3([]()
{
PRINT("Третий поток начат");
while (true)
{
if (SomeClass::flag)
{
PRINT("Третий поток завершён.");
break;
}
}
});
th1.join();
th2.join();
th3.join();
system("pause");
}