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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值