概要
記憶の限りですが、Microsoftの.NET関連ドキュメントにスレッド セーフの記載がありましたが、記載がなくなっているようです。
なぜ記載がなくなったのでしょうか?
もし、ご存じでしたらご教授いただきたく存じます。
背景
なぜこの質問に至ったのかというと、マルチスレッド動作によるExceptionが発生し、使用方法誤りだったと根拠を示そうとしました。
しかし、公式ドキュメントからスレッド セーフの記載がなくなっていることに気づきました。
なぜなくなったのか、検索力が足りないのか、よくわかりませんでした。
予測している内容
スレッドセーフという概念があいまいであるため記載を削除した?
スレッドセーフであるクラスやメソッドのみに記載するようにした?
参考文献
- StringBuilder クラス(.NET Framework 4.6.2) - Microsoft docs
- スレッドセーフとは? - teratail
- StringBuilder.ToString() throw an 'Index out of range' Exception - stackoverflow(英語)
何故記載がなくなったのか?と問われても、Microsoft の中の人以外は答えられないと思いますよ。
ちなみに明示的にスレッドセーフに作られていると書かれているもの以外は、全てスレッドアンセーフだと考えた方が良いです。
標準ライブラリ内では static な API は大抵スレッドセーフに作られていたはずですが、断言はできません。
仮に「スレッドセーフ」と記載されていたとしても使い方が間違っていればやはりExceptionは起こるでしょうし。反対に、昔、どんなクラス、メソッドが「スレッドセーフ」と書かれていましたか?>質問者さん
確認が遅くなりました。
> tamotoさん
> Microsoft の中の人以外は答えられない
確かにそうですね。
.NET coreなどドキュメント類もオープンソースとなっているので、どこかに議論(issue)が転がっていないのかな、と、思いまして質問させていただきました。
> dodox86 さん
確実にExceptionは発生します。
昔のページですが、「スレッドセーフ」の記載が全体的にあったと記憶しています。
https://web.archive.org/web/20180423043024/https://msdn.microsoft.com/en-us/library/system.text.stringbuilder(v=vs.110).aspx (英語:記録の残っている最終版)
https://web.archive.org/web/20170711085007/https://msdn.microsoft.com/ja-jp/library/system.text.stringbuilder(v=vs.110).aspx
2018/05にドキュメント関連が新しくなったようで、その際にスレッドセーフの記載を削ったものとみています。
> 反対に、昔、どんなクラス、メソッドが「スレッドセーフ」と書かれていましたか
パッと思いつく限り、BlockingCollectionが思い当たります。参照したところ、スレッドセーフの記載がありました。
https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.concurrent.blockingcollection-1?view=netcore-3.1#thread-safety
回答1件
あなたの回答
tips
プレビュー