Objective-Cと書き方がだいぶ変わったみたいなんでまとめる。
まだよくわかってないんで、書きかけとする。
言葉の意味
dispatch = 使者や手紙などを送るsemaphore = 手旗信号
要するに処理待ちのカウンターみたいなもので、値がマイナスの間はスレッドが停止する。
希望の処理が完了したら値をプラスしてやり、それが0になったらスレッド再開。
書式
詳しくは公式サイトで。
semaphoreを作る
let semaphore = DispatchSemaphore(value: 0)
semaphoreを通知、または増やす
semaphore.signal()
semaphoreを待つ、または減らす
semaphore.wait()
_ = semaphore.wait(timeout: DispatchTime.distantFuture)
semaphore.wait(wallTimeout: DispatchWallTime)
同期処理させたいコードを書くところ
DispatchQueue.global(qos: .background).async { ここ }
具体的書き方
- semaphoreを作る
- DispatchQueue.global(qos: ここ).async { }の引数に優先順位を書く。
- DispatchQueue.global(qos: .xxxxx).async { ここ }のクロージャ内に同期処理させたいコードを書く
- 処理が一件終了したらsemaphore.signal( )を実行して待ち行列を解消して次の処理に移る。
- クロージャの最後にどれくらい待つのかを書く(たとえば処理が終わるまでずっと(以前はFOREVERとかなんとか書いてたけど、今はdistantFuture(遠い未来)だそうだ)とか)
let semaphore = DispatchSemaphore(value: 0)
_ = semaphore.wait(timeout: DispatchTime.distantFuture)
0 件のコメント:
コメントを投稿