排他処理終了後の戻り値
複数のスレッドから扱うメモリーデータをアクセスする場合に排他をかけたいと考えています。
メモリーデータへのset/get/updateの関数があり、updateの関数では更新した結果を戻したいと考えています。
その場合、どのようにするのが一般的なのでしょうか。
現状は以下のようにすればどうだろうと考えています。
func set(input: Int) {
let semaphore = dispatch_semaphore_create(0)
var retval:Int!
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
self.クラスデータ = input
dispatch_semaphore_signal(semaphore)
}
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
}
func get() -> Int{
let semaphore = dispatch_semaphore_create(0)
var retval:Int!
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
retval = self.クラスデータ
dispatch_semaphore_signal(semaphore)
}
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
return retval
}
(ご指摘により、質問を修正しました)