难道我对volatile关键字的理解以前都是错误的?
请看代码
理论上输出应该是
实际上却是这样
最奇怪的地方是
thread1 sell ticket = 0
thread1 sell ticket = 0
请高手解惑
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
请高手解惑
...全文
相关推荐
Java 关键字 volatile 的理解与正确使用
Java 关键字 volatile 的理解与正确使用Java 语言中关键字 volatile 被称作轻量级的 synchronized,与 synchronized 相比,volatile 编码相对简单且运行时的开销较少
单片机C语言中volatile的作用
#### 面试中的`volatile`问题接下来,我们将通过几个具体的面试问题来深入理解`volatile`的概念:1. **一个参数既可以是const还可以是volatile吗?解释为什么。
嵌入式软件工程师面试题 Volatile.docx
理解和正确使用volatile是成为合格的嵌入式软件工程师的基础,特别是在处理硬件交互和多线程同步时。忽视volatile可能导致程序行为不可预测,甚至引发严重错误。
Java基础:volatile详解.pdf
Java基础:volatile详解Java基础:volatile详解问:谈谈你对volatile的理解?
java_cpu 内存模型和java内存模型.pdf
Java程序员了解CPU相关知识对于深入理解Java内存模型、并发编程乃至程序优化都有着重要的意义。下面将详细阐述文件中提及的知识点:首先,什么是volatile关键字?


