两个线程同时访问同一个int型变量,一个线程只读取,另一线程可读写。感觉好像结果不正确,请高手解惑
//自定义线程过程
UINT __stdcall Thread_Fn(void* pParam)
{
int* p = (int*)pParam;
有语句释放信号,通知主线程继续;
while(1)
{
if(*p)
{ 退出线程;}
其他语句...;//这语句不会有死循环,也不会占太多时间
}
}
//问题:有时候,主线程里(*p)已经改成非0了,但线程Thread_Fn有时并不会停止,有很小的几率发生,但确实发生过好几次
//难道说:子线程读取(*p)的瞬间,会导致主线程读写该变量失败?
//主线程里:
int var_1 = 0;
HANDLE hThread_1 = (HANDLE)_beginthreadex(其他参数..., Thread_Fn, &var_1, 其他参数...);
有语句等hThread_1释放信号后再继续...;
//线程hThread_1没结束前,会一直循环,var_1不会回收
while(自定义判断线程运行中(hThread_1))
{
if(某些条件a)
{
var_1 = 0;
其他语句a;
}
else if(某些条件b)
{
var_1 = 1;
其他语句b;
}
else
{
var_1 = 2;
其他语句c;
}
}
//自定义线程过程
UINT __stdcall Thread_Fn(void* pParam)
{
int* p = (int*)pParam;
有语句释放信号,通知主线程继续;
while(1)
{
if(*p)
{ 退出线程;}
其他语句...;//这语句不会有死循环,也不会占太多时间
}
}
//问题:有时候,主线程里(*p)已经改成非0了,但线程Thread_Fn有时并不会停止,有很小的几率发生,但确实发生过好几次
//难道说:子线程读取(*p)的瞬间,会导致主线程读写该变量失败?
//主线程里:
int var_1 = 0;
HANDLE hThread_1 = (HANDLE)_beginthreadex(其他参数..., Thread_Fn, &var_1, 其他参数...);
有语句等hThread_1释放信号后再继续...;
//线程hThread_1没结束前,会一直循环,var_1不会回收
while(自定义判断线程运行中(hThread_1))
{
if(某些条件a)
{
var_1 = 0;
其他语句a;
}
else if(某些条件b)
{
var_1 = 1;
其他语句b;
}
else
{
var_1 = 2;
其他语句c;
}
}