Objective-C实现生产者消费者问题(附完整源码)
发布日期:2025-04-26 23:27:46 浏览次数:3 分类:精选文章

本文共 1565 字,大约阅读时间需要 5 分钟。

Objective-C实现生产者消费者问题

生产者-消费者问题是一个经典的多线程问题,它涉及两个或多个线程之间的协作。生产者负责生成数据并将其放入缓冲区,而消费者则从缓冲区中取出数据进行处理。在Objective-C中,我们可以使用NSCondition来实现这一问题。

实现思路

为了确保生产者不会在缓冲区满时继续生产,消费者在缓冲区空时不会继续消费,我们需要使用同步机制。在Objective-C中,NSCondition是一个强大的工具,可以帮助我们实现这一点。

#import <Foundation/Foundation.h>

#define BUFFER_SIZE 5

@interface ProducerConsumerViewController : NSViewController

{
NSCondition *condition;
NSMutableArray *buffer;
NSOperationQueue *queue;
}

@implementation ProducerConsumerViewController

  • (void)viewDidLoad)

    {
    [super viewDidLoad];
    self.buffer = [NSMutableArray new];
    self.queue = [NSOperationQueue new];
    self.condition = [NSCondition new];
    }

  • (void *)producerThread:(NSThread *)thread

    {
    while (true) {
    [self.condition wait];
    if ([self.buffer count] < BUFFER_SIZE) {
    [self.buffer addObject:[NSDate new]];
    } else {
    // 缓冲区已满,生产者暂停
    sleep(1);
    }
    }
    }

  • (void *)consumerThread:(NSThread *)thread

    {
    while (true) {
    [self.condition wait];
    if ([self.buffer count] > 0) {
    [self.buffer removeObjectAtIndex:0];
    } else {
    // 缓冲区为空,消费者暂停
    sleep(1);
    }
    }
    }

  • (void)startThreads

    {
    [self.queue addExecutionThreadWithName:@"生产者" target:self selector:@selector(producerThread:)];
    [self.queue addExecutionThreadWithName:@"消费者" target:self selector:@selector(consumerThread:)];
    }

  • (void)stopThreads

    {
    [self.queue cancelAllOperations];
    }

代码解释

1. 首先,我们导入必要的头文件,并定义了缓冲区的大小为5。

2. 我们创建了一个NSCondition对象,用于同步生产者和消费者。

3. 在producerThread中,生产者会不断地等待条件信号,直到缓冲区有空位时才生成新的数据。

4. 在consumerThread中,消费者也会等待条件信号,直到缓冲区有数据时才开始消费。

5. 通过startThreads和stopThreads方法,我们可以控制线程的启动和停止。

上一篇:Objective-C实现生成 Mandelbrot 曼德勃罗集图像算法 (附完整源码)
下一篇:Objective-C实现生产者和消费者问题(附完整源码)

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月01日 07时03分06秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章