问题:
编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
解决思路:
使用互斥量实现线程互斥,使用一个int型变量flag实现线程的同步。
代码:
#include<Windows.h>
#include<iostream>
using namespace std;
HANDLE hMutex;
int flag=0;
DWORD WINAPI ProcA(LPVOID lp1)
{
for(int i=0; i<10; i++)
{
WaitForSingleObject(hMutex, INFINITE);
if(flag==0)
{
cout<<"A";
flag=(flag+1)%3;
}
ReleaseMutex(hMutex);
}
return 0;
}
DWORD WINAPI ProcB(LPVOID lp1)
{
for(int i=0; i<10; i++)
{
WaitForSingleObject(hMutex, INFINITE);
if(flag==1)
{
cout<<"B";
flag=(flag+1)%3;
}
ReleaseMutex(hMutex);
}
return 0;
}
DWORD WINAPI ProcC(LPVOID lp1)
{
for(int i=0; i<10; i++)
{
WaitForSingleObject(hMutex, INFINITE);
if(flag==2)
{
cout<<"C";
flag=(flag+1)%3;
}
ReleaseMutex(hMutex);
}
return 0;
}
void main()
{
hMutex=CreateMutex(NULL, 0, NULL);
HANDLE hThreadA=CreateThread(NULL, 0, ProcA, NULL, 0, NULL);
HANDLE hThreadB=CreateThread(NULL, 0, ProcB, NULL, 0, NULL);
HANDLE hThreadC=CreateThread(NULL, 0, ProcC, NULL, 0, NULL);
system("pause");
}