質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スレッドセーフ

マルチスレッド環境において、複数のスレッド上で常に正常に実行する事が可能なコードを、スレッドセーフなコードと呼びます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

1回答

1458閲覧

Microsoftの公式ドキュメントでのスレッドセーフの記載がなくなったのはなぜ?

testset

総合スコア221

スレッドセーフ

マルチスレッド環境において、複数のスレッド上で常に正常に実行する事が可能なコードを、スレッドセーフなコードと呼びます。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2020/08/19 09:12

概要

記憶の限りですが、Microsoftの.NET関連ドキュメントにスレッド セーフの記載がありましたが、記載がなくなっているようです。
なぜ記載がなくなったのでしょうか?
もし、ご存じでしたらご教授いただきたく存じます。

背景

なぜこの質問に至ったのかというと、マルチスレッド動作によるExceptionが発生し、使用方法誤りだったと根拠を示そうとしました。
しかし、公式ドキュメントからスレッド セーフの記載がなくなっていることに気づきました。
なぜなくなったのか、検索力が足りないのか、よくわかりませんでした。

予測している内容

スレッドセーフという概念があいまいであるため記載を削除した?
スレッドセーフであるクラスやメソッドのみに記載するようにした?

参考文献

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamoto

2020/08/19 09:26

何故記載がなくなったのか?と問われても、Microsoft の中の人以外は答えられないと思いますよ。 ちなみに明示的にスレッドセーフに作られていると書かれているもの以外は、全てスレッドアンセーフだと考えた方が良いです。 標準ライブラリ内では static な API は大抵スレッドセーフに作られていたはずですが、断言はできません。
dodox86

2020/08/19 10:05

仮に「スレッドセーフ」と記載されていたとしても使い方が間違っていればやはりExceptionは起こるでしょうし。反対に、昔、どんなクラス、メソッドが「スレッドセーフ」と書かれていましたか?>質問者さん
testset

2020/08/20 09:27

確認が遅くなりました。 > 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
guest

回答1

0

ベストアンサー

スレッドセーフであるクラスやメソッドのみに記載するようにした?

あえて書いていない場合、「運が良ければスレッドセーフかもしれないけど、それは誰も保証してくれない」といった感じです。

(状態変化そのものが考えられないので、スレッドセーフ性が明らかなイミュータブルなオブジェクトを除けば)「スレッドセーフ性」は重要な特徴なので、スレッドセーフに使えるものであればその旨の明記がしてあるはずです。

投稿2020/08/19 09:20

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

testset

2020/08/20 09:36

ご指摘の通りですね。スレッドセーフのものは記載があります。 https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.concurrent.blockingcollection-1?view=netcore-3.1#thread-safety https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.list-1?view=netcore-3.1#thread-safety tamotoさん、dodox86さん、maisumakunさん ご回答いただきありがとうございます。 特に公開情報もなさそうです。 スレッドセーフでないものはドキュメントに記載がなさそう ということが分かったので、 ベストアンサーとさせていただき本件をクローズさせていただきます。 誠にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問