读书人

多线程随机运行,该如何解决

发布时间: 2012-03-22 17:43:57 作者: rapoo

多线程随机运行
请高手帮忙
下面的程序是用c++写的多线程的程序,运行结果是一次六个线程全部运行,而没有达到六个线程中的某几个同时运行,该怎样修改才能让它随机运行某几个线程呢?源代码如下:
#include<windows.h>
#include<iostream>
using namespace std;

CRITICAL_SECTION gcc;//定义一个临界区
int sp=2; //盘子中最多可以放两个水果
int spa=0; //最开始盘子中没有苹果
int spo=0; //最开始盘子中没有橘子

DWORD WINAPI hThreadPF(LPVOID lpparameter)
{
while(true)
{
EnterCriticalSection(&gcc);//加锁 接下来的代码处理过程中不允许其他线程进行操作,
if(sp>0)
{
sp-=1;
spa+=1;
printf("爸爸放入一个苹果\n");
}
else
printf("盘子已满\n");
LeaveCriticalSection(&gcc);//解锁 到EnterCriticalSection之间代码资源已经释放了,其他线程可以进行操作
Sleep(7000);//延迟挂起的作用
}

return 0;
}
DWORD WINAPI hThreadPM(LPVOID lpparameter)
{
while(true)
{
EnterCriticalSection(&gcc);
if(sp>0)
{
sp-=1;
spo+=1;
printf("妈妈放入一个橘子\n");
}
else
printf("盘子已满\n");
LeaveCriticalSection(&gcc);
Sleep(7000);
}

return 0;
}
DWORD WINAPI hThreadPD1(LPVOID lpparameter)
{
while(true)
{
EnterCriticalSection(&gcc);
if(spa>0)
{
sp+=1;
spa-=1;
printf("大女儿吃掉一个苹果\n");
}
else
printf("盘子中没有苹果,大女儿没吃的\n");
LeaveCriticalSection(&gcc);
Sleep(7000);
}

return 0;
}
DWORD WINAPI hThreadPD2(LPVOID lpparameter)
{
while(true)
{
EnterCriticalSection(&gcc);
if(spa>0)
{
sp+=1;
spa-=1;
printf("小女儿吃掉一个苹果\n");
}
else
printf("盘子中没有苹果,小女儿没吃的\n");
LeaveCriticalSection(&gcc);
Sleep(7000);

}

return 0;
}
DWORD WINAPI hThreadPS1(LPVOID lpparameter)
{
while(true)
{
EnterCriticalSection(&gcc);
if(spo>0)
{
sp+=1;
spo-=1;
printf("大儿子吃掉一个橘子\n");
}
else
printf("盘子中没有橘子,大儿子没吃的\n");
LeaveCriticalSection(&gcc);
Sleep(7000);
}
return 0;
}
DWORD WINAPI hThreadPS2(LPVOID lpparameter)
{
while(true)
{
EnterCriticalSection(&gcc);
if(spo>0)
{
sp+=1;
spo-=1;
printf("小儿子吃掉一个橘子\n");
}
else
printf("盘子中没有橘子,小儿子没吃的\n");
LeaveCriticalSection(&gcc);
Sleep(7000);
}

return 0;
}
int main()
{
HANDLE hThreadF=NULL,hThreadM=NULL,hThreadD1=NULL,
hThreadD2=NULL,hThreadS1=NULL,hThreadS2=NULL;//创建的对象
InitializeCriticalSection(&gcc);//初始化一个临界资源对象
hThreadF=CreateThread(NULL,NULL,hThreadPF,NULL,NULL,NULL);//在主线程的基础上创建子线程
hThreadM=CreateThread(NULL,NULL,hThreadPM,NULL,NULL,NULL);//函数返回线程句柄
hThreadD1=CreateThread(NULL,NULL,hThreadPD1,NULL,NULL,NULL);
hThreadD2=CreateThread(NULL,NULL,hThreadPD2,NULL,NULL,NULL);
hThreadS1=CreateThread(NULL,NULL,hThreadPS1,NULL,NULL,NULL);
hThreadS2=CreateThread(NULL,NULL,hThreadPS2,NULL,NULL,NULL);
HANDLE tHandle[]={hThreadF,hThreadM,hThreadD1,
hThreadD2,hThreadS1,hThreadS2};
WaitForMultipleObjects(6,tHandle,true,INFINITE);//等待所有内核对象
DeleteCriticalSection(&gcc);
CloseHandle(hThreadF);//关闭内核对象
CloseHandle(hThreadM);
CloseHandle(hThreadD1);
CloseHandle(hThreadD2);
CloseHandle(hThreadS1);
CloseHandle(hThreadS2);
system("pause");
return 0;
}


[解决办法]
只运行其中几个是什么意思?
楼主想通过哪种方式让它运行?
随机数?

读书人网 >C++

热点推荐