Hy、マルチスレッドアプリケーションの共有データの検索/回避のルール
マルチスレッドアプリケーションの開発は難しいことです。特にロックする時点と何をロックするのかはあまり明確ではありません。しばしば私はメソッド/クラスを見ているので、複数のスレッドで変更できるデータを共有している場合は、自分自身に質問しなければなりません。そして、コードブロック全体のlock()で終わるかどうかわからないとき。
私が知りたいこと:共有データを特定するためのパターンやルールなどの提案はありますか?コードがスレッドセーフであることを保証する技術。
例えば:
- 静的メソッドは、クラスのフィールドを変更しないでください。 (フィールドをロックしない限り)
- メソッドの参照型パラメータは、直接渡すべきではありません。常にクローンを渡す。ところで
:
マイクロソフトリサーチがCHESSに取り組んでいます。並行プログラムでHeisenbugを見つけて再生するためのツール。私はこれとPLINQが並行プログラムの開発を改善することを願っています。
音が面白いです。 http://codebetter.com/blogs/patricksmacchia/archive/2008/01/13/immutable-types-understand-them-and-use-them.aspxは、より多くのことを学びたい人には役立つかもしれません。 – danio
+1いつもとても便利な答えです。不変の型を使用するのは非常に良いと思う。 "subquestion":C#のvar(匿名型)は不変ですが、そうではありませんか? – TomTom
@TomTom:はい、匿名型自体はC#で不変です。それは必ずしもVBでのケースではありません(それは匿名型の作成方法によります)。 –