美文网首页
OC @synchronized

OC @synchronized

作者: 绪绪绪 | 来源:发表于2016-11-11 11:30 被阅读0次

objective-c @synchronized 锁用法

Objective-C除了提供异常处理机制外,还提供了线程同步功能。异常处理在前面的“异常处理”章节有介绍。

线程的同步执行

Objective-C支持程序中的多线程。这就意味着两个线程有可能同时修改同一个对象,这将在程序中导致严重的问题。为了避免这种多个线程同时执行同一段代码的情况,Objective-C提供了@synchronized()指令。

指令@synchronized()通过对一段代码的使用进行加锁。其他试图执行该段代码的线程都会被阻塞,直到加锁线程退出执行该段被保护的代码段,也就是说@synchronized()代码块中的最后一条语句已经被执行完毕的时候。

指令@synchronized()需要一个参数。该参数可以使任何的Objective-C对象,包括self。这个对象就是互斥信号量。他能够让一个线程对一段代码进行保护,避免别的线程执行该段代码。针对程序中的不同的关键代码段,我们应该分别使用不同的信号量。只有在应用程序编程执行多线程之前就创建好所有需要的互斥信号量对象来避免线程间的竞争才是最安全的。

Objective-C中的同步特性是支持递归的。一个线程是可以以递归的方式多次使用同一个信号量的;其他的线程会被阻塞知道这个线程释放了自己所有的和该信号量相关的锁,也就是说通过正常执行或者是通过异常处理的方式退出了所有的@synchronized()代码块。

当在@synchronized()代码块中抛出异常的时候, Objective-C运行时会捕获到该异常,并释放信号量,并把该异常重新抛出给下一个异常处理者。

相关文章

  • OC @synchronized

    objective-c @synchronized 锁用法 Objective-C除了提供异常处理机制外,还提供了...

  • iOS 开发中用到的锁

    开发中可能用过的锁 1. @synchronized() 作用是创建一个互斥锁; @synchronized(OC...

  • iOS中的常见锁

    @synchronized 日常开发中常常需要使用锁,可能大多数是使用OC封装的@synchronized,使用起...

  • Swift 中的 Lock

    // Lock // OC 中最常用的锁是 互斥锁, 即 @synchronized /* @synchroniz...

  • Swift常用的互斥锁

    @synchronized是OC 中的线程互斥锁方法。Swift 对应使用 objc_sync_enter(sel...

  • swift中互斥锁

    在swift中,互斥锁如何写oc中的互斥锁:@synchronized(self) { //需要执行的代码块 } ...

  • iOS @synchronized

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

  • OC底层原理21-锁的原理

    iOS--OC底层原理文章汇总[/p/14911da92f74] 本文探索常用锁以及@synchronized底层...

  • iOS 底层探索:常见的锁

    iOS 底层探索: 学习大纲 OC篇[/p/9d73ee7aae64] 前言 上一篇讲了@Synchronized...

  • OC - 关于@synchronized(self)的用法

    @synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改。是objectiv...

网友评论

      本文标题:OC @synchronized

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