問題タブ [thread-safety]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
thread-safety - オブジェクトを使用するにはロックする必要がありますか?
私は言語機能について熟考していて、次の機能がどの言語にも実装されているかどうか疑問に思っていました。
Mutex 内でのみオブジェクトにアクセスできることを宣言する方法。たとえばJavaでは、オブジェクトが同期ノイズブロックにあり、C#ではロックされている場合にのみ、オブジェクトにアクセスできます。
オブジェクトが Mutex ブロックの外で使用された場合、コンパイラ エラーが発生します。
何かご意見は?
アップデート
一部の人々は質問を誤解していると思います。オブジェクトをロックできるかどうかを尋ねているのではなく、ロック/同期ステートメント内からのみアクセスできることをオブジェクトの宣言時に述べるメカニズムがあるかどうかを尋ねています。
delphi - 「スレッドセーフ」な読み取り/書き込み操作を使用するDelphiデータ型のリスト?
'boolean'変数は、任意のスレッドからの読み取りと書き込みに対してスレッドセーフですか?私はそれらがそうであると言うためにいくつかのニュースグループの参照を見ました。他のデータ型は利用できますか?(列挙型、おそらく短いint?)
任意のスレッドから安全に読み取ることができるすべてのデータ型のリストと、さまざまな同期方法に頼ることなく任意のスレッドで安全に書き込むことができる別のリストがあると便利です。
.net - .NET Dictionary: スレッドセーフな列挙のみですか?
複数のスレッドから .NET ディクショナリを列挙するだけで安全ですか?
ディクショナリの変更はまったく行われません。
.net - このコードはスレッドセーフですか?
UI スレッドがネットワーク通信を行うバックグラウンド スレッドと通信する必要があるコードを書いています。コードは機能しますが、スレッドセーフと見なされますか?
経験豊富な誰かが私を正しい道に導くことができれば、私はずっと気分が良くなるでしょう...
これは .NET C++ コードです... :)
c# - BindingList や ObservableCollection などのクラスがスレッドセーフでないのはなぜですか?
何度も何度も、BindingList と ObservableCollection のスレッド セーフ バージョンを作成する必要があることに気付きました。UI にバインドすると、これらのコントロールを複数のスレッドから変更できないためです。私が理解しようとしているのは、なぜこれが事実なのかということです-それは設計上の欠陥ですか、それともこの動作は意図的なものですか?
asp.net - ASP.NET と System.Diagnostics のトレース - 何か見落としがありますか?それとも悪い考えですか?
さまざまな一般的な理由から、ASP.NET アプリケーションでトレースを使用したいと考えました。特に、強力な方法でトレースを調べることができるService Trace Viewerツールを使用できる可能性があることを知って以来.
私はこれまでこの痕跡を使ったことがなかったので、勉強を始めました。Google、SO、および MSDN をしばらく使用した後、ようやく物事がどのように機能するかについての良いアイデアが得られました。しかし、私はまた、非常に気がかりなことを1つ見つけました。
ASP.NET アプリケーションでトレースを使用する場合、Web 要求によってトレース メッセージをグループ化することは非常に理にかなっています。特に私がそれを使いたい理由の 1 つは、パフォーマンスの問題を研究するためです。上記のツール<Corrleation>
は、生成された XML ファイルでタグを使用することにより、これもサポートします。これは から来ていSystem.Diagnostics.Trace.CorrelationManager
ます。また、アクティビティの開始/停止などの他の優れた機能も使用できます。これにより、トレース メッセージをより適切にグループ化できます。かっこいいでしょ?
私もそう思っていましたが、CorrelationManager
実際に住んでいた場所を調べ始めるまでは。結局のところ、それは静的プロパティでした。Reflector をいじってみたところ、恐ろしいことがわかりましたCallContext
。ASP.NET で使用してはいけないものはどれですか?
それで...ここで何か足りないのですか?ASP.NET のトレースには本当に根本的な欠陥がありますか?
追加:うーん、私はこの内容を自分で書き直そうとしているところです。痕跡を探索するためにきちんとしたツールを使いたいと思っています。これをしてはいけない理由はありますか?おそらく、まだ何か良いものがありますか?すぐに答えが得られたら本当にいいですね。:)
追加 2:私の同僚は、これが単なる理論上の問題ではないことを確認しました。彼は、彼が取り組んでいるシステムでこれを観察しました。それで解決です。私は自分のやりたいように物事を行う新しい小さなシステムを構築するつもりです。:)
追加 3:うわー、すごい... Microsoft の担当者は、ASP.NET で Correlation Manager を使用することに何の問題も見つけられませんでした。結局、どうやらこのバグの修正は得られていないようです...
multithreading - スレッドセーフの達成
質問アプリケーションがスレッドセーフであることを確認するにはどうすればよいですか?彼らの一般的な慣行、テスト方法、避けるべきこと、探すべきことはありますか?
背景私は現在、さまざまなスレッドで多数のバックグラウンドタスクを実行し、Indyを使用してクライアントと通信するサーバーアプリケーションを開発しています(通信に自動生成されたスレッドの別の束を使用)。アプリケーションは非常に利用可能である必要があるため、プログラムのクラッシュは非常に悪いことであり、アプリケーションがスレッドセーフであることを確認したいと思います。いずれにせよ、これまでに発生したことのない例外をスローするコードを時々発見し、ほとんどの場合、オブジェクトを適切に同期するのを忘れた、ある種の同期バグであることに気付きます。したがって、ベストプラクティス、スレッドセーフのテストなどに関する私の質問です。
mghie:答えてくれてありがとう!私はおそらくもう少し正確にすべきです。明確にするために、私はマルチスレッドの原則について知っています。プログラム全体で同期(モニター)を使用し、スレッドの問題を他の実装の問題と区別する方法を知っています。しかし、それにもかかわらず、私は時々適切な同期を追加することを忘れ続けています。例を挙げると、コードでRTLソート関数を使用しました。のように見えた
ソート中にFKeyListを同期する必要があったことがわかりました。その単純なコード行を最初に書いたとき、それは私の頭に浮かびませんでした。私が話したいのはこれらのシンです。同期コードの追加を簡単に忘れてしまう場所はどこですか?すべての重要な場所に同期コードを追加したことをどのように確認しますか?
ruby-on-rails - Rubyクラスのメンバー変数は今大丈夫ですか?
昨年 5 月にポートランドで開催された Railsconf で、Rails では @@foo のような Ruby クラス メンバー変数は本質的に非スレッドセーフであるため危険であると主張されたプレゼンテーションに参加しました。
後で質問を調査しましたが、質問を実際に具体化するリンクは見つかりませんでした。Rails とスレッドに関する、クラス メンバーの質問に実際に触れている優れた記事へのポインタをいただければ幸いです。また、Rail 2+ と Yarv がこの点に関してどのように変化したかを知っておくとよいでしょう。
編集:
おそらく私のプレゼンテーションの記憶は曖昧ですが、@@foo には、共有変数へのアクセスを厳密に制御する必要があるという通常の注意事項以外の問題があったことを覚えています。少し前に修正された Ruby コード自体にメモリ リークがあったことは知っています。Ruby の共有変数とマルチタスクに関する記事のリンクを探しています。※このため現在はクラス変数を何にも使っていませんが、場合によっては使えたらいいなと思っています。
c# - Windows フォーム コントロールにスレッド セーフなアクセス メソッドを書き込む最短の方法
記事上で:
http://msdn.microsoft.com/en-us/library/ms171728(VS.80).aspx
作成者は、次のメソッドを使用して、Windows フォーム コントロールへのスレッド セーフな呼び出しを行います。
同じことを達成するためのより短い方法はありますか?
mysql - テーブルを使用して Web サーバー ファームで最後に使用された ID を保持する
最後に使用された ID を保持するために 1 行のテーブルを使用します (auto_increment を使用しない理由があります)。私のアプリはサーバー ファームで動作するはずなので、最後に挿入された ID を更新する (つまり、インクリメントする) 方法を知りたいです。スレッド セーフの問題 (サーバー ファーム内のサーバー間の競合状態) を回避するために、新しい ID を 1 つの手順で選択します。