多线程按顺序输出
本来是想循环输出0,1,2的,可是为什么只输出0呢?
思路是:
三个线程,三个互斥信号量;
线程1输出时先等待信号量1然后释放信号量2;
线程2输出时先等待信号量2然后释放信号量3;
线程3输出时先等待信号量3然后释放信号量1;
初始时每个信号量都是占用状态,首先在主线程中释放信号量1,这样三个线程就跑起来了。
可是,貌似结果和我想的不一样吖…………大神指教!
#include <iostream>
#include <Windows.h>
const int Tn = 3;
HANDLE hMutex[Tn];
void PutStar(LPVOID param)
{
int w = int(param);
int nxt = (w+1)%Tn;
while(1)
{
WaitForSingleObject(hMutex[w],INFINITE);
std::cout<<w<<std::endl;
ReleaseMutex(hMutex[nxt]);
}
}
int main()
{
HANDLE t[Tn];
for (int i=0;i<Tn;i++)
{
hMutex[i] = CreateMutex(NULL,TRUE,NULL);
t[i] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)PutStar,(LPVOID)i,0,NULL);
}
ReleaseMutex(hMutex[0]);
WaitForMultipleObjects(Tn,t,TRUE,INFINITE);
}
#include <iostream>
#include <Windows.h>
const int Tn = 3;
INT turn = 0;
HANDLE hEvent;
void PutStar(LPVOID param)
{
int w = int(param);
int nxt = (w+1)%Tn;
int pct = 10;
while(pct--)
{
while(turn!=w)
WaitForSingleObject(hEvent,INFINITE);
std::cout<<w<<std::endl;
turn = nxt;
SetEvent(hEvent);
}
}
int main()
{
HANDLE t[Tn];
hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
for (int i=0;i<Tn;i++)
{
t[i] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)PutStar,(LPVOID)i,0,NULL);
}
turn = 0;
SetEvent(hEvent);
WaitForMultipleObjects(Tn,t,TRUE,INFINITE);
}