线程问题 帮帮我

来源:百度知道 编辑:UC知道 时间:2024/07/07 17:08:11
#include <windows.h>
#include <iostream.h>

DWORD WINAPI fun1(LPVOID lp);
DWORD WINAPI fun2(LPVOID lp);
int piao=500;

main()
{

HANDLE pthread1,pthread2;
pthread1=CreateThread(0,0,fun1,0,0,0);
pthread2=CreateThread(0,0,fun2,0,0,0);
CloseHandle(pthread1);
CloseHandle(pthread2);

Sleep(3000);
return 0;

}

DWORD WINAPI fun1(LPVOID lp)
{
while(1)
{
if(piao>0)
cout<<"线成1卖票"<<piao--<<endl;
else
break;
}
return 0;
}

DWORD WINAPI fun2(LPVOID lp)
{
while(1)
{
if(piao>0)
cout<<"线成2卖票"<<piao--<<endl;
else
break;
}
return 0;
}

这个piao=500 运行输出的时候最多怎么就是299????

1.你程序存在线程同步问题

2.你的原因是因为命令窗口最多显示300行
所以你的应该为299到1+上个Press any key to continue

共300行

int piao=500

1\线程处理共享数据piao--时。没有加锁。
2\很有可能线程在没有处理完所有数据时。主程序(main)函数已经sleep(300)就结束了。所以整个程序退入。应加入等待线程序结束的函数.

2楼你没看见它休息的为3000毫秒吗?

我运行了程序,把休息时间改为了6W毫秒,还是一样.确实是1楼那样

1楼说的对 顶1楼的