iOS @synchronized

作者: gaookey | 来源:发表于2020-10-30 10:40 被阅读0次

OC

NSObject *obj = [[NSObject alloc] init];

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    
    @synchronized (obj) {
        NSLog(@"线程同步的操作1 开始");
        sleep(3);
        NSLog(@"线程同步的操作1 结束");
    }
});

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    sleep(1);
    @synchronized (obj) {
        NSLog(@"线程同步的操作2");
    }
});

Swift

let obj = NSObject()

DispatchQueue.global().async {
    
    objc_sync_enter(obj)
    print("线程同步的操作1 开始")
    sleep(3)
    print("线程同步的操作1 结束")
    objc_sync_exit(obj)
}

DispatchQueue.global().async {
    sleep(1)
    objc_sync_enter(obj)
    print("线程同步的操作2")
    objc_sync_exit(obj)
}

上面结果的执行结果为:

线程同步的操作1 开始
线程同步的操作1 结束
线程同步的操作2

@synchronized(obj) 指令使用的 obj 为该锁的唯一标识,只有当标识相同时,才为满足互斥,如果线程2中的 @synchronized(obj) 改为 @synchronized(self),刚线程2就不会被阻塞,@synchronized 指令实现锁的优点就是我们不需要在代码中显式的创建锁对象,便可以实现锁的机制,但作为一种预防措施,@synchronized 块会隐式的添加一个异常处理例程来保护代码,该处理例程会在异常抛出的时候自动的释放互斥锁。所以如果不想让隐式的异常处理例程带来额外的开销,你可以考虑使用锁对象。

相关文章

  • ios 线程锁

    ios多线程之线程锁 1.@synchronized的用法 @synchronized(self)的用法: @sy...

  • OC-锁的介绍及简单使用

    1、@synchronized @synchronized是 iOS 中最常见的锁,用法很简单: 在线程 1 内容...

  • [转]关于 @synchronized,这儿比你想知道的还要多

    原文:关于 @synchronized,这儿比你想知道的还要多 原文:iOS里synchronized的死锁、性能...

  • iOS都有哪些锁

    iOS都有哪些锁:synchronized 、atomic、oSSpinLook、NSLock、dispatch_...

  • iOS @synchronized

    OC Swift 上面结果的执行结果为: @synchronized(obj) 指令使用的 obj 为该锁的唯一标...

  • OC--各种线程锁

    参考:正确使用多线程同步锁@synchronized()iOS中的锁iOS多线程安全详解iOS 常见知识点(三):...

  • IOS 保证线程同步方式&性能对比

    背景 IOS中保持线程同步的常用技术: @synchronized NSLock NSRecursiveLock ...

  • 线程锁

    iOS 多线程加锁有很多方式:@synchronized、 NSLock、NSRecursiveLock、NSCo...

  • 线程锁

    iOS中有几种线程锁:@synchronized、NSLock以及NSRecursiveLock(递归锁)。本文用...

  • Objective-C线程同步

    背景 目前iOS中保持线程同步的常用技术有: @synchronized NSLock NSRecursiveLo...

网友评论

    本文标题:iOS @synchronized

    本文链接:https://www.haomeiwen.com/subject/idbamktx.html