好吧.一个mutex 只能解决 一个生产者, 一个消费者的情况;
生产消费 具体是这样的, 2个线程同时启动, 生产线程比如在数组中放入一个值, 然后通知消费线程,消费线程干完事后再通知生产者.
消费者的核心是 俺永远只能跟在生产者屁股后面
使用一个mutex 实现 (当然 只用一个mutex , 只能让线程去抢占了) , 下一个例子是用2个事件对象,
const int BUFF_SIZE = 10;
struct
{
HANDLE mutex; //一个mutex 就能搞定了
int arr[BUFF_SIZE];
int index; //生产者生产的位置
} share_object;
unsigned int WINAPI producer_thread( void* lpParameter)
{
while(1)
{
WaitForSingleObject(share_object.mutex,-1);
if(share_object.index >= BUFF_SIZE){
ReleaseMutex(share_object.mutex);
break;
}
cout << "producer_thread index: " << share_object.index << endl;
share_object.arr[share_object.index++] = 1;
ReleaseMutex(share_object.mutex);
}
return 0;
}
//唯一要注意的是消费者的代码实现
unsigned int WINAPI consumer_thread( void* lp