タグ

GoLangと排他制御に関するclavierのブックマーク (2)

  • 状態機械を合成してデッドロックを検出できる Go 言語パッケージを作ってみました - チェシャ猫の消滅定理

    はじめに マルチスレッドで動作するプログラムの設計は難しい問題です。個々のスレッドの動作は単純に見えても、複数が並行して動作する場合の動作は組み合わせ論的に複雑になります。また、タイミングに依存する不具合は狙って再現することが難しく、通常の単体テストによる検出にも限界があります。 そんなとき、有効な手法がモデル検査です。システムの取りうる状態をあらかじめ網羅的に探索することで、「実際に動作させた際にごく低い確率で踏むバグ」であっても、動作させることなく設計段階で発見することが可能になります。 ところでちょうど先日、デッドロック発見器を自作するハンズオンに参加する機会がありました。内容は非常にシンプルなモデル検査器を実装するというもので、せっかくなのでそのときの成果物を Go のパッケージとしてまとめたものを以下に公開しました。 github.com 以下、このパッケージで何ができるのかを具

    状態機械を合成してデッドロックを検出できる Go 言語パッケージを作ってみました - チェシャ猫の消滅定理
  • GoのRaceDetectorと気をつけるべき所|株式会社CAリワード

    この記事はGo (その3) Advent Calendar 2016 2日目の記事です。 こんにちは。開発部の平田です。今回は、Golang に標準で組み込まれているデータ競合の検知の仕組みである race detector と、どのようなケースで検知してくれるのかについて https://golang.org/doc/articles/race_detector.html を元に簡単に紹介したいと思います。 Golang には goroutine という並行処理のための機構があるので、気軽に goroutine を起動して並行処理を書くことが出来ます。その為、意図しない所でレースコンディションが発生してしまうことが時々あります。極力そういったことが起きないように基的には channel を使って値をコピーして渡したりするのですが、思わぬ所で発生してしまうデータレースに対して検知する仕組

    GoのRaceDetectorと気をつけるべき所|株式会社CAリワード
  • 1