C++生产者消费者问题代码详解 - 使用互斥体和信号量
#include<iostream>: 包含输入输出流库。#include<cstdlib>: 包含C标准库函数。#include<ctime>: 包含时间函数库。#include<windows.h>: 包含Windows API函数库。using namespace std;: 使用标准命名空间。const int BUFFER_SIZE=10;: 定义缓冲区大小为10。int buffer[BUFFER_SIZE];: 定义缓冲区数组。int front,rear;: 定义缓冲区的前后指针。bool full;: 定义缓冲区是否满的标志。HANDLE Mutex;: 定义互斥体句柄。HANDLE Full;: 定义信号量句柄,表示缓冲区已满。HANDLE Empty;: 定义信号量句柄,表示缓冲区为空。void showBuffer(): 定义显示缓冲区函数。WaitForSingleObject(Empty,INFINITE);: 等待信号量Empty为1,表示缓冲区不为空,可以进行消费。WaitForSingleObject(Mutex,INFINITE);: 等待互斥体Mutex解锁。ReleaseMutex(Mutex);: 释放互斥体Mutex。ReleaseSemaphore(Full,1,NULL);: 释放信号量Full,表示缓冲区已满。CreateMutex(NULL,FALSE,NULL);: 创建一个互斥体。CreateSemaphore(NULL,0,5,NULL);: 创建一个初始值为0,最大值为5的信号量Full。CreateSemaphore(NULL,5,5,NULL);: 创建一个初始值为5,最大值为5的信号量Empty。CreateThread(NULL,0,producer,NULL,0,NULL);: 创建生产者线程。CreateThread(NULL,0,consumer,NULL,0,NULL);: 创建消费者线程。Sleep(400000);: 主线程休眠400000毫秒,即运行400秒。
原文地址: https://www.cveoy.top/t/topic/ocyR 著作权归作者所有。请勿转载和采集!