同步 4.0.0

同步 4.0.0

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布上次发布2017年10月
SwiftSwift版本4.0
SPM支持SPM

James Ide维护。



同步 4.0.0

  • 作者:
  • James Ide



将Objective-C的@synchronized指令暴露给Swift。与Objective-C指令类似,Synchronized会锁定互斥量,运行一些代码,并在代码完成或抛出异常时释放锁。

链接框架

一旦链接框架,下面的Swift代码应该能编译

import Synchronized

let x = synchronized(NSObject()) { 0 }

公共API

public func synchronized(object: AnyObject, closure: () -> Void)

使用

synchronized(mutexObject) {
  // Code to run in your critical section
}

public func synchronized<T>(object: AnyObject, closure: () -> T) -> T

使用

let value = synchronized(threadUnsafeDictionary) {
  threadUnsafeDictionary[key]
}

@synchronized的差异

Objective-C的@synchronized是一个语言级指令,不引入新的函数作用域。这意味着return语句会导致程序从包含@synchronized指令的周围函数返回。

- (void)returnDifferenceExample
{
    @synchronized {
        return;
    }
    NSLog(@"This line of code does not run.");
}

相比之下,Synchronized使用闭包,这确实引入了函数作用域。从传递给synchronized的闭包返回只会退出闭包,而不会退出周围函数。

func returnDifferenceExample() {
    synchronized {
        return
    }
    println("This line of code does run.")
}

Synchronized的闭包用@noclosure属性标注,这消除了使用self.访问实例变量的需要,因此在这一点上与Objective-C的@synchronized指令类似。