难道我对volatile关键字的理解以前都是错误的?

此帐号已弃用12 此帐号已弃用12 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
请看代码

volatile int tickets=0;
volatile BOOL g_bRun = TRUE;
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
char buf[100];
while(g_bRun)
{
if(tickets<10)
{
sprintf(buf,"\nthread1 sell ticket = %d",tickets);
OutputDebugString(buf);
printf(buf);
tickets++;
}
else
Sleep(10);
}
return 0;
}

DWORD WINAPI Fun2Proc(LPVOID lpParameter)
{
char buf[100];
while(g_bRun)
{
if(tickets<10)
{
sprintf(buf,"\nthread2 sell ticket = %d",tickets);
OutputDebugString(buf);
printf(buf);
tickets++;
}
else
Sleep(10);
}
return 0;
}

int main(int argc, char* argv[])
{
CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
Sleep(2000);
system("PAUSE");
g_bRun = FALSE;
return 0;
}


理论上输出应该是

thread2 sell ticket = 0
thread1 sell ticket = 1
thread2 sell ticket = 2
thread1 sell ticket = 3
thread2 sell ticket = 4
thread1 sell ticket = 5
thread2 sell ticket = 6
thread1 sell ticket = 7
thread2 sell ticket = 8
thread1 sell ticket = 9


实际上却是这样

thread1 sell ticket = 0
thread1 sell ticket = 0
thread2 sell ticket = 0
thread1 sell ticket = 1
thread2 sell ticket = 2
thread1 sell ticket = 3
thread2 sell ticket = 4
thread1 sell ticket = 5
thread2 sell ticket = 6
thread1 sell ticket = 7
thread2 sell ticket = 8
thread1 sell ticket = 9

最奇怪的地方是
thread1 sell ticket = 0
thread1 sell ticket = 0
请高手解惑
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
此帐号已弃用12
C语言 70,039 成员 243,237 内容