Producer consumer problem - 生产者消费者问题

Producer Consumer :生产者 消费者

1. 什么是生产者、消费者?此处和我们日常生活差不多。洗发水工厂是生产者,百姓就是他最忠实的消费者;ATM是生产者,取款的民众就是他的消费者了;学校公司食堂是生产者,食客就是消费者... ... 诸如此类的模型多如牛毛。

2. 这样的生活模型在计算机中如何应用?现代计算机基本上是多任务操作系统(不论是单核CPU还是多核CPU),其调度的基本单位是线程(如何理解线程,参考下方名字大话解释)。不同线程之间如何通信(参考大话名词解释)?生产者,消费者就是一种异步通信通知的机制。

3. 参考以下模型:

void *producer(void *data)

{

   pthread_lock(mt);

   if ( list is full )

   {

      pthread_cond_wait( cond_not_full, mt ); //

   }

   add_queue( list, data );

   pthread_cond_signal( cond_not_empty );

   pthread_unlock(mt);

}

void *consumer(void * data)

{

   pthread_lock(mt);

   if ( list is empty )

   {

      pthread_cond_wait( cond_not_empty, mt ); //

   }

   delete_queue( list, data );

   pthread_cond_signal( cond_not_full );

   pthread_unlock(mt);

}

4. 知识串联:生产和消费者 结合 List队列可以办 N 多事情,具体使用场景,不同的Idea不太相同,不在列举。但是代码模型基本一致。

大话名词解释:

线程:它拥有自己或者共享资源,并且大多数情况下是在一个死循环里面跑(按PC地址裸奔)。比如:while(1){ // To do something ; } ; for (;;) { // To do something ;}

目前我使用比较多的是POSIX pthread线程。当然Windows、C++、Android等自己封装的也是不错的。

线程间通信、进程间通信:其实就是两个人(两个线程)拿着两个手机在打电话,你发个Data我,我发个Data你。如此而已。

常用方式:管道,消息队列,共享内存,信号量,Socket等 参考Ebook《Unix进程间通信》

 

Icekirin.yuan - 冰火麒麟工作室

Q群:147565042

发布了14 篇原创文章 · 获赞 8 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/YXFLINUX/article/details/51911842