微软100题(34)生产者消费者模型实现队列
2015-05-28 15:10
302 查看
题目:
实现一个队列。
队列的应用场景为:
一个生产者线程将int 类型的数入列,一个消费者线程将int 类型的数出列
多线程题目,多线程实现的方法有信号量,临界区,互斥量,事件对象等,其中临界区消耗的资源最少,因为其他都是应用了内核对象,需要进行用户态和内核态的转换。
本题参考/article/1360525.html中写的示例代码,采用信号量实现
实现一个队列。
队列的应用场景为:
一个生产者线程将int 类型的数入列,一个消费者线程将int 类型的数出列
多线程题目,多线程实现的方法有信号量,临界区,互斥量,事件对象等,其中临界区消耗的资源最少,因为其他都是应用了内核对象,需要进行用户态和内核态的转换。
本题参考/article/1360525.html中写的示例代码,采用信号量实现
#include <windows.h> #include <stdio.h> #include <process.h> #include <iostream> #include <queue> using namespace std; HANDLE ghSemaphore; //信号量 const int gMax = 100; //生产(消费)总数 std::queue<int> q; //生产入队,消费出队 //生产者线程 unsigned int __stdcall producerThread(void* pParam) { int n = 0; while(++n <= gMax) { //生产 q.push(n); cout<<"produce "<<n<<endl; ReleaseSemaphore(ghSemaphore, 1, NULL); //增加信号量 Sleep(300);//生产间隔的时间,可以和消费间隔时间一起调节 } _endthread(); //生产结束 return 0; } //消费者线程 unsigned int __stdcall customerThread(void* pParam) { int n = gMax; while(n--) { WaitForSingleObject(ghSemaphore, 10000); //消费 cout<<"custom "<<q.front()<<endl; q.pop(); Sleep(500);//消费间隔的时间,可以和生产间隔时间一起调节 } //消费结束 CloseHandle(ghSemaphore); cout<<"working end."<<endl; _endthread(); return 0; } void threadWorking() { ghSemaphore = CreateSemaphore(NULL, 0, gMax, NULL); //信号量来维护线程同步 cout<<"working start."<<endl; unsigned threadID; HANDLE handles[2]; handles[0] = (HANDLE)_beginthreadex( NULL, 0, producerThread, nullptr, 0, &threadID); handles[1] = (HANDLE)_beginthreadex( NULL, 0, customerThread, nullptr, 0, &threadID); WaitForMultipleObjects(2, handles, TRUE, INFINITE); } int main() { threadWorking(); getchar(); return 0; }
相关文章推荐
- 用生产者消费者模型实现的线程安全环形队列
- 多进程 队列 实现生产者消费者模型 python 笔记
- wait,notify,非阻塞队列实现生产者,消费者模型
- linux c语言实现队列及用于生产者消费者模型
- 通过阻塞队列实现生产者消费者模型
- 多线程+阻塞队列实现生产者-消费者模型获取队列数据问题
- 经典的生产者与消费者模型(基于BlockingQueue队列实现)
- 11.python并发入门(part8 基于线程队列实现生产者消费者模型)
- 什么是阻塞队列? 如何使用阻塞队列来实现生产者-消费者模型?
- Java并发编程笔记 使用阻塞队列实现生产者-消费者模型
- 什么是阻塞队列?如何使用阻塞队列来实现生产者-消费者模型?
- 线程池 队列生产者消费者模型实现
- 利用阻塞队列实现生产者、消费者模型的实例
- 线程池的实现(生产者消费者),借助队列实现
- 基于环形队列的生产者消费者模型编写。
- [多线程] 生产者消费者模型的BOOST实现
- Java多线程之~~~~使用wait和notify实现生产者消费者模型
- 生产者/消费者模式(阻塞队列) 一个经典的并发模型
- 使用阻塞队列实现生产者-消费者模式——Java实现
- IOS 生产者-消费者模型实现