线程问题 帮帮我
来源:百度知道 编辑: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????
#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楼的