ざっくりと理解するSwift同期処理


概要

同期処理を実装する機会があったのでまとめた
syncとasyncの二種類ある
(7/1 syncの部分がasyncになっていたので修正しました)

async: 他のスレッド処理終了を待機しない

async
DispatchQueue.global().async {
  print("global thread start.")
  //何か重い処理
  print("global thread end.")
}
DispatchQueue.global().async {
  print("main thread start.")
  //何か重い処理
  print("main thread end.")
}

# result
global thread start.
main thread start.
global thread end.
main thread end.
async
start==(Thread 1)==>end  
start==(Thread 2)=====>end

いわゆる並列処理
重い処理の裏で別処理を動かしたいときなどに使える

sync: 他のスレッド処理終了を待機する

sync
DispatchQueue.global().async {
  print("global thread start.")
  //何か重い処理
  print("global thread end.")
}
DispatchQueue.global().sync {
  print("main thread start.")
  //何か重い処理
  print("main thread end.")
}

# result
global thread start.
global thread end.
main thread start.
main thread end.
sync
start==(Thread 1)==>end  start==(Thread 2)====>end

いわゆる直列処理
クリティカルセクションなどに使える