IOS多线程同步问题

在iOS多线程开发中,防止并发访问同一数据导致错误是关键。文章介绍了同步块、NSLock以及NSCondition的使用,阐述了如何通过加锁、解锁确保数据访问的互斥。特别是NSCondition,允许线程在条件不满足时等待,待条件满足后再唤醒继续执行,以实现线程间的协作。
摘要由CSDN通过智能技术生成

        在多线程开发中,要注意避免的是多个线程在同一时间对某数据进行读或写所造成的不可预见错误。因此在不同线程中需要对公共数据进行互斥的访问,最常见的是生产者与消费者问题。

1. 同步块或者NSLock

        同步块或者NSLock实现的效果差不多,都是进行加锁-操作-解锁,以此达到互斥访问的效果。

        在一个代码块中进行加锁可以实现不同线程对该代码块的互斥访问。在多个代码块中使用同一个信号量进行加锁则不同代码块之间也能实现互斥访问。即加锁解锁的本质是对信号量的原子处理。

//生产者-同步代码块,括号参数为自定义信号量
-(void)synchronizeFunc1 {
    
    @synchronized (self) {
        if(count < 1000) {
            count += 100;
            NSLog(@"P count is %d", count);
        }
    }
}
//消费者-同步代码块
-(void)synchronizeFunc2 {
    
    @synchronized (self) {
        if(count > 0) {
            count -= 100;
            NSLog(@"C count is %d", count);
        }
    }
}
//生产者-NSLock,一个NSLock对象就是一个信号量
-(void)synchronizeFunc3 {
    
    [nsLock lock];
    if(count < 1000) {
        count += 100;
        NSLog(@"P count is %d", count);
    }
    [nsLock u
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值