タグ

semaphoreに関するItisangoのブックマーク (3)

  • セマフォ (マルチスレッドのプログラミング)

    セマフォ セマフォは、E.W. ダイクストラ (Dijkstra) が 1960 年代の終わりごろに考案したプログラミング手法です。ダイクストラのセマフォモデルは、鉄道線路の運行をモデル化したものです。一度に一の列車しか走れない単線の鉄道線路を思い浮かべてください。 この鉄道線路を保護するのがセマフォです。列車は単線区間に入るとき、セマフォの状態が進行許可状態になるのを待たなければなりません。列車が単線区間に入るとセマフォの状態は、他の列車が単線区間に入るのを禁止する状態に変化します。単線区間から出る列車は、セマフォの状態を進行許可状態に戻して他の列車が単線区間に入ることができるようにしなければなりません。 コンピュータ内のセマフォは、単一の整数で表現されます。スレッドは進行が許可されるのを待ち、その後進行したことを知らせるためにセマフォに対して P 操作を実行します。 この操作をもう少

    Itisango
    Itisango 2020/05/08
    “Dijkstraが 1960 年代の終わりごろに考案したプログラミング手法です。ダイクストラのセマフォモデルは、鉄道線路の運行をモデル化したものです。一度に一本の列車しか走れない単線の鉄道線路を思い浮かべてください”
  • 非同期:awaitを含むコードをロックするには?(AsyncLock編)[C#、VB]

    async修飾子/await演算子(VBではAsync修飾子/Await演算子、以降では省略)を使った非同期プログラミングでは、スレッド間の排他ロックにlockステートメント(VBではSyncLockステートメント)が使えない。代わりにSemaphoreSlimクラス(System.Threading名前空間)を使えば可能なのだが、コードの記述が面倒である。そこで稿では、AsyncLockクラスを使って簡潔に記述する方法を説明する。 SemaphoreSlimクラスによる排他ロック SemaphoreSlimクラスを使ってスレッド間の排他ロックを行うコードは、次のようなものだ。lockステートメントが使えない理由も含めて、詳細は「非同期:awaitを含むコードをロックするには?(SemaphoreSlim編)[C#、VB]」を参照していただきたい。 static System.Threa

    非同期:awaitを含むコードをロックするには?(AsyncLock編)[C#、VB]
  • 非同期:awaitを含むコードをロックするには?(SemaphoreSlim編)[C#、VB]

    async修飾子/await演算子(VBではAsync修飾子/Await演算子、以降は「async/await」と略す)によって、非同期プログラミングは簡潔に記述できるようになった。ところが、複数スレッド間の排他ロックを実現するために使ってきたlockステートメント(VBではSyncLockステートメント)が、await演算子(VBではAwait演算子、以降は省略)を含むコードでは使えなくなってしまったのである。async/awaitを多用するコード(特にWindowsストアアプリやWindows Phoneアプリ)を書いていて困った経験を持つ人も多いだろう。await演算子を含むコードをロックするにはどうしたらよいのだろうか? 稿では、SemaphoreSlimクラス(System.Threading名前空間)を使う方法を説明する。 従来のlock/SyncLockステートメントによる

    非同期:awaitを含むコードをロックするには?(SemaphoreSlim編)[C#、VB]
  • 1