LoginSignup
1
1

More than 5 years have passed since last update.

asyncio における同期プリミティブの必要性

Last updated at Posted at 2018-02-11

asyncio を使った並列実行はシングルスレッドで動作するから、ロックとかの同期プリミティブいらないじゃん。と思っていたんだけど、そんなことはなかった。実際標準ライブラリにもあるね asyncio.Lock とか。

結局ロックなどの同期プリミティブの用途は、クリティカルセクションの保護が第一義なわけ。「同時に1つの処理しかしない(=asyncio)」ことと、「クリティカルセクションにただ1つの処理が存在する(=同期プリミティブ)」ことは、似ているようで全然違う

stackoverflow で似たような議論とサンプルコードを見つけた。

とはいえ、クリティカルセクションを含む処理を同期関数にすればやっぱり同期プリミティブはいらないんじゃない?と思う。いやいや、それは短絡的にすぎる。同期関数にすることによってイベントループ全体が止まるわけで、、、やっぱり非同期な同期プリミティブが必要という結論になる。いやーむずかしいね。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1