NSCondition认识

本文深入解析了NSCondition在Objective-C中如何实现线程间的同步控制,包括wait、waitUntilDate、signal和broadcast方法的使用。通过示例代码演示了如何在多线程环境中利用NSCondition进行线程的阻塞与唤醒。
@interface NSCondition : NSObject <NSLocking> {
@private
    void *_priv;
}

//阻塞当前线程知道收到signaled信号,在调用这个方法之前必须调用lock方法
- (void)wait;

//阻塞当前线程知道收到signaled信号或到时,在调用这个方法之前必须调用lock方法
- (BOOL)waitUntilDate:(NSDate *)limit;

//发送信号,唤醒等待的线程;发送一次唤醒一个线程;
- (void)signal;

//广播信号,唤醒所有等待的线程
- (void)broadcast;

@property (nullable, copy) NSString *name NS_AVAILABLE(10_5, 2_0);

@end



eg:
NSCondition *lock = [NSCondition new];

//线程1
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [lock lock];
    [lock wait];
    NSLog(@"线程1");
    NSLog(@"线程1解锁");
    [lock unlock];
    
});

//线程2
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    
    [lock lock];
    NSLog(@"线程2");
    NSLog(@"线程2解锁");
    [lock signal];
    [lock unlock];
});

print:线程1必须等待信号后,才能执行
2019-12-03 10:47:46.781456+0800 Task[6337:432439] 线程2
2019-12-03 10:47:46.781857+0800 Task[6337:432439] 线程2解锁
2019-12-03 10:47:46.782155+0800 Task[6337:432438] 线程1
2019-12-03 10:47:49.787424+0800 Task[6337:432438] 线程1解锁

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值