ZKX's LAB

解决生产者消费者问题 如果一个产品质量出了问题,应该由生产商负责任还是经销商负责任,如果消费者要求经销商负责任,怎么办?

2020-10-18知识4

有关利用记录型信号量解决生产者消费者的问题? 有一群生产者2113进程在生产产品,并将这些产5261品提供给消费者进程4102去消费。为使生产者进1653程与消费者进程能并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程将其所生产的产品放入一个缓冲区中;消费者进程可从一个缓冲区中取走产品去消费。尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之间必须保持同步,既不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区投放产品。参考代码:int in=0,out=0;in:输入指针,out:输出指针;item buffer[n];n个缓冲区组成的数组;semaphore mutex=1,full=0,empty=n;mutex:互斥信号量,生产者进程和消费者进程都只能互斥访问缓冲区;full:资源信号量,满缓冲区的数量;empty:资源信号量,空缓冲区的数量;信号量不允许直接参与运算,故都要定义;生产者程序;void Producer(){do {生产者生产一个产品nextp;wait(empty);申请一个空缓冲区;wait(mutex);申请临界资源;buffer[in]=nextp;将产品添加到缓冲区;in=(in+1)%n;类似于循环队列;signal(mutex);释放临界资源;signal(full);释放一个满缓冲区;} while(TRUE);}消费者程序;void Producer(){do {。

解决生产者消费者问题 如果一个产品质量出了问题,应该由生产商负责任还是经销商负责任,如果消费者要求经销商负责任,怎么办?

用信号量机制解决生产者消费者问题 import java.util.concurrent.Semaphore;class Q {/仓库int n;仓库中的产品Start with consumer semaphore unavailable.static Semaphore semCon=new Semaphore(0);static Semaphore semProd=new Semaphore(1);void get(){try {semCon.acquire();} catch(InterruptedException e){System.out.println(\"InterruptedException caught\");}System.out.println(\"Got:\"+n);semProd.release();}void put(int n){try {semProd.acquire();} catch(InterruptedException e){System.out.println(\"InterruptedException caught\");}this.n=n;System.out.println(\"Put:\"+n);semCon.release();}}class Producer implements Runnable {/生产者Q q;Producer(Q q){this.q=q;new Thread(this,\"Producer\").start();}public void run(){for(int i=0;i;i+)q.put(i);}}class Consumer implements Runnable {/消费者Q q;Consumer(Q q){this.q=q;new Thread(this,\"Consumer\").start();}public void run(){for(int i=0;i;i+)q.get();}}class ProdCon {/测试类public static void main(String args[]){Q q=new Q();new Consumer(q);new Producer(q);}}}

解决生产者消费者问题 如果一个产品质量出了问题,应该由生产商负责任还是经销商负责任,如果消费者要求经销商负责任,怎么办?

在windows操作系统中用信号量机制解决生产者消费者问题的代码 windows里面信号量比较难用,下面是我模仿一本教材写的一个例子,加了一些注释,在.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];线程信息数组;。

解决生产者消费者问题 如果一个产品质量出了问题,应该由生产商负责任还是经销商负责任,如果消费者要求经销商负责任,怎么办?

如何用多线程同步方法解决生产者-消费者问题,生产者和消费者问题是从操作系统中的许多实际同步问题中抽象出来的具有代表性的问题,它反映了操作系统中典型的同步例子,生产。

利用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_。

随机阅读

qrcode
访问手机版