NSCondition实现生产者和消费者模式

#import "ShareResource.h"

@interface ShareResource ()
{
    BOOL _isEmpty;
    NSCondition *_condition;
}
@property (nonatomic,copy) NSString *name;
@property (nonatomic,copy) NSString *gender;

@end

@implementation ShareResource

- (instancetype)init {
    self = [super init];
    if(self){
        _condition = [[NSCondition alloc] init];
        _isEmpty = YES;
    }
    return self;
}

- (void)save:(NSString *)name gender:(NSString *)gender {
    [_condition lock];//同步锁:加锁
    while(!_isEmpty){//这里用while比if更加安全
        [_condition wait];//让当前线程等待,直到被唤醒,调用此方法之前必须要先调用lock
    }
    self.name = name;
    [NSThread sleepForTimeInterval:0.005];
    self.gender = gender;
    _isEmpty = NO;
    [_condition signal];//发出信号,唤醒一个正在等待的线程。您可以使用该方法唤醒一个正在等待条件的线程。您可以多次调用这个方法来唤醒多个线程。如果没有线程在等待条件,这个方法就什么也不做。
    // broadcast:发出信号,唤醒所有等待它的线程。如果没有线程在等待条件,这个方法就什么也不做。
    [_condition unlock];//同步锁:解锁
}

- (void)get {
    [_condition lock];//同步锁:加锁
    while(_isEmpty){//这里用while比if更加安全
        [_condition wait];//让当前线程等待,直到被唤醒,调用此方法之前必须要先调用lock
    }
    [NSThread sleepForTimeInterval:0.005];
    NSLog(@"%@-----%@",self.name,self.gender);
    _isEmpty = YES;
    [_condition signal];
    [_condition unlock];//同步锁:解锁
}


@end

你可能感兴趣的:(NSCondition实现生产者和消费者模式)