#include
using namespace std;
#define N 12
int buffer[N];
unsigned int count = 0;
HANDLE hMutant;
HANDLE hEmpty;
HANDLE hFilled;
void Produce();
void Consume();
DWORD WINAPI Producer(LPVOID lpParam);
DWORD WINAPI Consumer(LPVOID lpParam);
int main(int argc, char* argv[])
{
HANDLE hThreadP, hThreadC;
hThreadP = CreateThread(NULL, 0, Producer, NULL, 0, NULL);
hThreadC = CreateThread(NULL, 0, Consumer, NULL, 0, NULL);
WaitForSingleObject(hThreadP, INFINITE);
WaitForSingleObject(hThreadC, INFINITE);
hMutant = CreateMutex(NULL, false, NULL);
hEmpty = CreateSemaphore(NULL, N, N, NULL);
hFilled = CreateSemaphore(NULL, 0, N, NULL);
return 0;
}
void Produce() {
cout << "Producing buffer[" << count << "]" << endl;
++count;
}
void Consume() {
--count;
cout << "Consuming buffer[" << count << "]" << endl;
}
DWORD WINAPI Producer(LPVOID lpParam) {
while (true) {
WaitForSingleObject(hEmpty, INFINITE);
WaitForSingleObject(hMutant, INFINITE);
Produce();
ReleaseMutex(hMutant);
ReleaseSemaphore(hFilled, 1, NULL);
}
return 0;
}
DWORD WINAPI Consumer(LPVOID lpParam) {
while (true) {
WaitForSingleObject(hFilled, INFINITE);
WaitForSingleObject(hMutant, INFINITE);
Consume();
ReleaseMutex(hMutant);
ReleaseSemaphore(hEmpty, 1, NULL);
}
return 0;
}
运行结果的一部分:
Producing buffer[0]
Producing buffer[0]
Consuming buffer[Producing buffer[42949672951]]
Producing buffer[2Consuming buffer[]1
]
Producing buffer[2Consuming buffer[]1
]
Producing buffer[2Consuming buffer[1]]
Consuming buffer[1Producing buffer[1]]
Consuming buffer[0Producing buffer[1]]
不知道为什么没有实现互斥