Swift で Objective-C の @synchronized

環境: Swift version 1.1 (swift-600.0.56.1)

クリティカルセクションを作りたいとき、Objective-C の場合は

@synchronized(obj) {
    ...
}

となるところを Swift の場合は

objc_sync_enter(obj)
    ...
objc_sync_exit(obj)

とする。

exit 漏れが怖いのでラップする。

func sync(lock: AnyObject, proc: () -> ()) {
    objc_sync_enter(lock)
    proc()
    objc_sync_exit(lock)
}
sync(obj) {
    ...
}