A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

求学者噜噜

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 求学者噜噜 初级黑马   /  2015-12-5 15:58  /  2543 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
RT。学IOS多线程时接触了NSCondition,学习的时候参考了网上的代码(百度搜索前10条基本都是一模一样的程序)。

后来自己研究,总感觉网上的代码不太对,故此提问,望大神解答。

参考代码出处:http://www.cnblogs.com/pengyingh/articles/2343972.html

是典型的生产者&消费者模式。

核心代码如下,生产者:
[size=1em][backcolor=rgb(245, 245, 245) !important]C/C++ code[size=1em]
[color=white !important][size=1em]?

[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em][size=1em]-(void)createProducer{
[size=1em]    [condition lock];
[size=1em]    [products addObject:[[NSObject alloc] init]];
[size=1em]    NSLog(@”produce a product”);
[size=1em]    [condition signal];
[size=1em]    [condition unlock];
[size=1em]}





消费者:
[size=1em][backcolor=rgb(245, 245, 245) !important]C/C++ code
[color=white !important][size=1em]?

[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em][size=1em]-(void)createConsumer{
[size=1em]    [condition lock];
[size=1em]    while ([products count]==0) {
[size=1em]        NSLog(@”wait for product”);
[size=1em]        [condition wait];
[size=1em]    }

[size=1em]    [products removeObjectAtIndex:0];
[size=1em]    NSLog(@”consume a product”);
[size=1em]    [condition unlock];
[size=1em]}





疑惑有:
1、生产者、消费者模式中,一般而言,生产者只有一个,消费者有多个。因此,生产者中的锁是否是多余的。
2、假定有多个生产者,则生产者使用和消费者相同的锁,是否合理。
3、消费者等待响应信号[condition wait]时,外部嵌入while循环是否冗余。
4、该while循环必定会造成该部分死循环,消费者会常挂起。这里是否是故意设计成常挂起的消费者。

5 个回复

倒序浏览
卧槽。好坑。代码格式全乱了。重新贴一下。
RT。学IOS多线程时接触了NSCondition,学习的时候参考了网上的代码(百度搜索前10条基本都是一模一样的程序)。

后来自己研究,总感觉网上的代码不太对,故此提问,望大神解答。

参考代码出处:http://www.cnblogs.com/pengyingh/articles/2343972.html

是典型的生产者&消费者模式。

核心代码如下,生产者:

  1. -(void)createProducer{
  2.     [condition lock];
  3.     [products addObject:[[NSObject alloc] init]];
  4.     NSLog(@”produce a product”);
  5.     [condition signal];
  6.     [condition unlock];
  7. }
复制代码


消费者:


  1. -(void)createConsumer{
  2.     [condition lock];
  3.     while ([products count]==0) {
  4.         NSLog(@”wait for product”);
  5.         [condition wait];
  6.     }

  7.     [products removeObjectAtIndex:0];
  8.     NSLog(@”consume a product”);
  9.     [condition unlock];
  10. }
复制代码


疑惑有:
1、生产者、消费者模式中,一般而言,生产者只有一个,消费者有多个。因此,生产者中的锁是否是多余的。
2、假定有多个生产者,则生产者使用和消费者相同的锁,是否合理。
3、消费者等待响应信号[condition wait]时,外部嵌入while循环是否冗余。
4、该while循环必定会造成该部分死循环,消费者会常挂起。这里是否是故意设计成常挂起的消费者。
回复 使用道具 举报
先推荐你看一下操作系统的书其中 就有生产者,消费者的,先把逻辑搞清楚,代码是次要的,会点C就可以
回复 使用道具 举报
求学者噜噜 来自手机 初级黑马 2015-12-9 00:50:22
板凳
ios学者 发表于 2015-12-7 18:29
先推荐你看一下操作系统的书其中 就有生产者,消费者的,先把逻辑搞清楚,代码是次要的,会点C就可以 ...

我是系统学过计组的,c也用了好多年了,生产者消费者也熟悉。但是学ios条件锁的时候,看的资料和我以前的知识有冲突,所以出来提问的。
回复 使用道具 举报
求学者噜噜 来自手机 初级黑马 2015-12-9 00:51:26
报纸
人工置顶
回复 使用道具 举报
额。。。表示要先看懂代码,不然都是瞎。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马