RT。学IOS多线程时接触了NSCondition,学习的时候参考了网上的代码(百度搜索前10条基本都是一模一样的程序)。
后来本人研究,总感觉网上的代码不太对,故此提问,望高手解答。
参考代码出处:http://www.cnblogs.com/pengyingh/articles/2343972.html
是典型的生产者&消费者模式。
核心代码如下,生产者:
后来本人研究,总感觉网上的代码不太对,故此提问,望高手解答。
参考代码出处:http://www.cnblogs.com/pengyingh/articles/2343972.html
是典型的生产者&消费者模式。
核心代码如下,生产者:
-(void)createProducer{ [condition lock]; [products addObject:[[NSObject alloc] init]]; NSLog(@”produce a product”); [condition signal]; [condition unlock]; }
消费者:
-(void)createConsumer{ [condition lock]; while ([products count]==0) { NSLog(@”wait for product”); [condition wait]; } [products removeObjectAtIndex:0]; NSLog(@”consume a product”); [condition unlock]; }
疑惑有:
1、生产者、消费者模式中,一般而言,生产者只有一个,消费者有多个。因此,生产者中的锁能否是多余的。
2、假定有多个生产者,则生产者使用和消费者相同的锁,能否合理。
3、消费者等待响应信号[condition wait]时,外部嵌入while循环能否冗余。
4、该while循环必定会造成该部分死循环,消费者会常挂起。这里能否是故意设计成常挂起的消费者。
解决方案
40
1、生产者、消费者模式中,一般而言,生产者只有一个,消费者有多个。因此,生产者中的锁能否是多余的。
生产者和消费者都访问了products对象,所以必须对products加锁,必须是同一个锁
2、假定有多个生产者,则生产者使用和消费者相同的锁,能否合理。
见1
3、消费者等待响应信号[condition wait]时,外部嵌入while循环能否冗余。
就这个例子而言,假如其他地方 [condition signal];没有while循环,[products removeObjectAtIndex:0];就会崩溃
4、该while循环必定会造成该部分死循环,消费者会常挂起。这里能否是故意设计成常挂起的消费者。
见3
生产者和消费者都访问了products对象,所以必须对products加锁,必须是同一个锁
2、假定有多个生产者,则生产者使用和消费者相同的锁,能否合理。
见1
3、消费者等待响应信号[condition wait]时,外部嵌入while循环能否冗余。
就这个例子而言,假如其他地方 [condition signal];没有while循环,[products removeObjectAtIndex:0];就会崩溃
4、该while循环必定会造成该部分死循环,消费者会常挂起。这里能否是故意设计成常挂起的消费者。
见3