Ogladajac odcinek o multithreadingu :
pojawil mi sie taki problem :
#include <iostream>
#include <windows.h>
//__thread
//TUTAJ NIE ROZNICY W WYNIKACH!!!
int x;
DWORD __stdcall MyProc(void *param)
{
x = (int)param;
std::cout<<(int)param<<" ("<<GetCurrentThreadId()<<")\n";
Sleep(1000);
std::cout<<(int)param<<" ("<<GetCurrentThreadId()<<")\n";
return 0;
}
int main()
{
std::cout<<"Start\n";
HANDLE h[2] = {
CreateThread(0, 0, MyProc, (void *)1, 0, 0),
CreateThread(0, 0, MyProc, (void *)2, 0, 0)
};
WaitForMultipleObjects(2, h, true, INFINITE);
std::cout<<"Stop\n";
return 0;
}
Zmienna x nie jest nadpisywana przez watki. tak jakby __thread nie ma wplywu na wyniki, a powinno.
DLaczego watki nie nadpisuja sobie tej zmiennej globalnej?
Przykladowy wynik:
1 (13936)
2 (6064)
1 (13936)
2 (6064)