ZKX's LAB

在生产者和消费者的实例中,如何实现线程并发和共享资源? 利用管程解决生产者-消费者问题

2020-10-10知识3

利用AND信号量来解决生产者-消费者问题的算法描述 C++写信号量控制程序确实比较难。这是我过去做的一个例子,在.net 2008下调试通过的。你试试看吧ProducerCustomer2.cpp:定义控制台应用程序的入口点。include\"stdafx.hincludeinclude<;fstream>;/与课本不同include<;iostream>;/与课本不同includeincludeusing namespace std;定义一些常量;本程序允许的最大临界区数;define MAX_BUFFER_NUM 10秒到毫秒的乘法因子;define INTE_PER_SEC 1000本程序允许的生产和消费线程的总数;define MAX_THREAD_NUM 64定义一个结构,记录在测试文件中指定的每一个线程的参数struct ThreadInfo{int serial;线程序列号char entity;是P还是Cdouble delay;线程延迟int thread_request[MAX_THREAD_NUM];线程请求队列int n_request;请求个数};全局变量的定义临界区对象的声明,用于管理缓冲区的互斥访问;CRITICAL_SECTION PC_Critical[MAX_BUFFER_NUM];int Buffer_Critical[MAX_BUFFER_NUM];缓冲区声明,用于存放产品;HANDLE h_Thread[MAX_THREAD_NUM];用于存储每个线程句柄的数组;ThreadInfo Thread_Info[MAX_THREAD_NUM];线程信息数组;HANDLE empty_semaphore;一个信号量;HANDLE h_mutex;一个互斥量;DWORD n_。

在生产者和消费者的实例中,如何实现线程并发和共享资源? 利用管程解决生产者-消费者问题

在linux下用c语言实现用多进程同步方法演示“生产者-消费者”问题

在生产者和消费者的实例中,如何实现线程并发和共享资源? 利用管程解决生产者-消费者问题

计算机操作系统上的内容 关于利用记录型信号量解决生产者-消费者问题 这段代码中item 这是C语言写的一段程序,buffer[n]是一个数组,应该是整型的,因此buffer前面应该是int而非item

在生产者和消费者的实例中,如何实现线程并发和共享资源? 利用管程解决生产者-消费者问题

如何利用管程来解决生产者消费者问题 管程管程 系统中的各种硬件资源和软件资源,均可用数据结构抽象地描述其资源特性,即用少

如何用多线程同步方法解决生产者-消费者问题

记录型信号量解决生产者消费者问题伪代码,描述每一步具体执行过程 Var mutex,empty,full:semaphore:=1,n,0;定义三个信号量buffer:array[0,.,n-1]of item;定义缓冲池,容量为nin,out:integer:=0,0;beginparbeginproceducer:begin/生产者repeatproducer an item nextp;生产一个产品wait(empty);申请一个空缓冲区wait(mutex);申请缓冲池的使用权buffer(in):=nextp;将产品放入缓冲池中in:=(in+1)mod n;下一个空缓冲区地址signal(mutex);释放缓冲池使用权signal(full);释放一个满缓冲区until false;endconsumer:beginrepeatwait(full);wait(mutex);nextc:=buffer(out);out:=(out+1)mod n;signal(mutex);signal(empty);consumer the item in nextc;until false;endparendendnextp 应该是next proceducer的意思吧nextc 应该是next consumer貌似也不是什么变量,属于语言描述而已下面的消费者也是差不多的。至于生产者进程如何被阻塞和唤醒,因为程序中有一个 repeat语句,所以进程不断测试缓冲池是否有空缓冲区,以及缓冲池是否有其他进程使用。若两个条件不满足,则进入阻塞队列等待。若某一时刻两个条件都能满足,则能唤醒该进程。建议楼主还是去找几题用C语言写的生产者消费者程序看吧,这个语言不太容易看懂

#线程#生产者消费者问题#线程阻塞#信号量

随机阅读

qrcode
访问手机版