ホットコーナーブログ(iiyu.asablo.jpの検索)ホットコーナー内の検索でもASAHIネット(asahi-net.or.jp)全体の検索です。検索したい言葉のあとに、空白で区切ってki4s-nkmrを入れるといいかも。---共有資源の排他制御は、やり方を間違えると大変。タイミングによってバグが出たり出なかったり、非常にやっかい。ほんとは、モデルをきちんと定義して、数学的に間違いないことを証明してから、それを実装するのがいいが、なかなかそうもいかない。Methods)という分野。興味があれば、最後に関連するぼくのブログを挙げておきますので、読んでください。単一プロセッサ内でのマルチスレッド、マルチプロセスの世界から、マルチプロセッサ、さらにはネットワークでつながった広域分散アーキテクチャの世界まで、さまざまなアイデアと実装がある。■アーキテクチャレベルhttps://ja.wikipedia.org/wiki/NUMAhttps://ja.wikipedia.org/wiki/シェアード・ナッシング・アーキテクチャhttps://ja.wikipedia.org/wiki/ビジーウェイトhttps://ja.wikipedia.org/wiki/プロセス間通信https://ja.wikipedia.org/wiki/キャッシュメモリhttps://ja.wikipedia.org/wiki/キャッシュコヒーレンシhttps://ja.wikipedia.org/wiki/バススヌーピングバススヌーピングは、スヌープキャシュともいわれる。■ハードウェアレベルこれらのハードウェアのサポートをベースに、後述、ソフトウェアレベルの実装が行われる。https://ja.wikipedia.org/wiki/テスト・アンド・セットhttps://ja.wikipedia.org/wiki/コンペア・アンド・スワップhttps://ja.wikipedia.org/wiki/フェッチ・アンド・アッドhttps://ja.wikipedia.org/wiki/Load-Link/Store-Conditional■ソフトウェアレベルOSのAPIでのサポートもさまざま。プログラミング言語では、専用構文を設けてサポートするものやライブラリレベルでサポートするものなど、さまざま。次のリストは、大体、下にいくほど抽象化レベルが高くなっているつもり。https://ja.wikipedia.org/wiki/セマフォhttps://ja.wikipedia.org/wiki/ロック_(情報工学)https://ja.wikipedia.org/wiki/スピンロックhttps://ja.wikipedia.org/wiki/ミューテックスhttps://ja.wikipedia.org/wiki/Lock-freeとWait-freeアルゴリズムhttps://en.wikipedia.org/wiki/Readers–writer_lockhttps://ja.wikipedia.org/wiki/リード・コピー・アップデートread-copy-update、RCUhttps://ja.wikipedia.org/wiki/モニタ_(同期)モニタの説明の中に、条件変数の説明もある。https://ja.wikipedia.org/wiki/メッセージ_(コンピュータ)メッセージの説明の中に、メッセージパッシングの説明もある。https://ja.wikipedia.org/wiki/ソフトウェアトランザクショナルメモリhttps://ja.wikipedia.org/wiki/Future_パターンいわゆるFutureとPromise。C++やJavaScriptにも入っている。言語やライブラリのサポートでいうと。C++には、アトミック変数、ミューテックス、Future/Promiseがある。Javaの同期・排他制御のモデルの基本はモニタ。Scalaは、いっぱいある(笑)。Elixirはメッセージパッシング(メールボックス)。Clojureはソフトウェアトランザクショナルメモリ(STM)もサポート。FutureとPromiseは、多くの言語で利用可能。Scriptに入った。オープンアーキテクチャのススメ。FPGAマガジン、いろいろやっとるわ。Methods)https://ja.wikipedia.org/wiki/SPINモデルチェッカ■おまけC++のatomic変数は、ミューテックスより、より基本的、原始的なもの。処理が軽いが、使うのは難しい。ロックフリーなアルゴリズムの実装にも使えるが、ちゃんと動く実装は、ほんとに頭のいい人たちがやらないとだめ。ミューテックスは、atomic変数に比べたら遅いが、抽象化が進んでいるので、使うのが楽。std::lock_guardなどと一緒に使う。しないと、ロックを開放し忘れたりする。std::unique_lockなどは、コンピュータサイエンスの同期・排他制御でいうロックとは違う。std::unique_lockなどは、ミューテックスなどロック可能オブジェクト(Lockableなオブジェクト)を安全に使うためのクラスになっている。std::futureは、抽象度が高いクラスで、スレッド間でデータを渡すのに使うといい。https://cpprefjp.github.io/reference/future/future.htmlC++のstd::futurehttps://cpprefjp.github.io/reference/future/promise.htmlC++のstd::promiseC++には、セマフォがないが、次は、C++11のきれいなコードで、セマフォを実装している。技術的メモをしていきたい日記2012-03-23mutexの制約とバイナリセマフォ[コメント(0)|トラックバック(0)]府中、分倍河原のラーメン、麺屋もろ。いまの限定は「豆乳担々麺」。