タグ付けされた質問 「mutex」

ミューテックス(「相互排除」)は、同じデータまたはリソースが複数のスレッドから同時にアクセス(特に変更)されたときに整合性を保証するメカニズムです。


30
単一インスタンスのWPFアプリケーションを作成する正しい方法は何ですか?
.NETでのC#とWPFの使用(ではなく) Windowsフォームやコンソールて、単一のインスタンスとしてのみ実行できるアプリケーションを作成する正しい方法は何ですか? 私はそれがミューテックスと呼ばれるいくつかの神秘的なものと関係があることを知っていますが、これらの1つが何であるかを停止して説明するのに煩わしい人をめったに見つけることができません。 コードは、ユーザーが2番目のインスタンスを開始しようとしたことをすでに実行中のインスタンスに通知する必要もあり、存在する場合はコマンドライン引数も渡す可能性があります。
657 c#  .net  wpf  mutex 



8
C#でグローバルミューテックスを使用するための良いパターンは何ですか?
Mutexクラスは非常に誤解されており、グローバルmutexはさらに誤解されています。 グローバルmutexを作成するときに使用する、安全で適切なパターンは何ですか? うまくいくもの 私のマシンが置かれているロケールに関係なく ミューテックスを適切に解放することが保証されています ミューテックスが取得されない場合、オプションで永久にハングアップしない 他のプロセスがミューテックスを放棄するケースを扱います
377 c#  concurrency  mutex 



7
再帰的ロック(Mutex)と非再帰的ロック(Mutex)
POSIXでは、ミューテックスを再帰的にすることができます。つまり、同じスレッドが同じミューテックスを2回ロックしても、デッドロックは発生しません。もちろん、2回アンロックする必要もあります。そうしないと、他のスレッドがミューテックスを取得できません。pthreadをサポートするすべてのシステムが再帰的ミューテックスもサポートするわけではありませんが、POSIX準拠にしたい場合は、そうする必要があります。 他のAPI(より高レベルのAPI)も、通常はロックと呼ばれるミューテックスを提供します。一部のシステム/言語(Cocoa Objective-Cなど)では、再帰的mutexと非再帰的mutexの両方を提供しています。一部の言語では、どちらか一方しか提供されません。たとえば、Javaミューテックスは常に再帰的です(同じオブジェクトで同じスレッドが2回「同期」する場合があります)。それらが提供する他のスレッド機能によっては、再帰的ミューテックスは自分で簡単に記述できるため、再帰ミューテックスがなくても問題ない場合があります(私は、より単純なミューテックス/条件操作に基づいて、自分で再帰的ミューテックスをすでに実装しています)。 私が本当に理解していないこと:非再帰的mutexは何に適していますか?同じミューテックスを2回ロックする場合、なぜスレッドデッドロックが必要なのですか?それを回避できる高水準言語(たとえば、デッドロックが発生するかどうかをテストし、発生する場合は例外をスローする)でも、通常はそうしません。代わりにスレッドをデッドロックさせます。 これは、誤って2回ロックして1回だけロック解除した場合にのみ発生します。再帰的なmutexの場合、問題を見つけるのは難しくなります。そのため、すぐにデッドロックして、間違ったロックがどこにあるかを確認できますか?しかし、ロックを解除するときにロックカウンターを返すのと同じことはできませんでした。最後のロックを解放し、カウンターがゼロではない場合、例外をスローしたり、問題をログに記録したりできます。または、私が確認できない他のより有用な非再帰的ミューテックスのユースケースはありますか?それとも、非再帰的なミューテックスは再帰的なミューテックスよりもわずかに高速になる可能性があるため、それは単にパフォーマンスかもしれませんか?しかし、私はこれをテストしましたが、違いは実際にはそれほど大きくありません。

10
pthreadの条件変数関数にミューテックスが必要なのはなぜですか?
私は読んでいpthread.hます。条件変数に関連する関数(などpthread_cond_wait(3))には、引数としてミューテックスが必要です。どうして?私が知る限りでは、その引数として使用するためだけにミューテックスを作成しますか?そのミューテックスは何をすることになっているのですか?

8
ミューテックスの例/チュートリアル?[閉まっている]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 4ヶ月前に閉鎖。 この質問を改善する 私はマルチスレッドに不慣れで、ミューテックスの仕組みを理解しようとしていました。多くのグーグル操作を行いましたが、ロックが機能しない独自のプログラムを作成したため、どのように機能するかについて疑問が残りました。 mutexの絶対に直感的でない構文の1つはですpthread_mutex_lock( &mutex1 );。ここでは、mutexがロックされているように見えますが、私が本当にロックしたいのは他の変数です。この構文は、ミューテックスをロックすると、ミューテックスがロック解除されるまでコードの領域をロックすることを意味しますか?次に、スレッドは領域がロックされていることをどのようにして知るのでしょうか。[ 更新:スレッドは、 メモリフェンシングによって領域がロックされていることを認識しています ]。そして、そのような現象はクリティカルセクションと呼ばれるべきではないでしょうか?[ 更新:重要なセクションオブジェクトはWindowsでのみ使用できます。オブジェクトはミューテックスよりも高速で、それを実装するスレッドにのみ表示されます。それ以外の場合、クリティカルセクションは、ミューテックスによって保護されているコードの領域を指します ] 簡単に言うと、最も簡単なミューテックスのサンプルプログラムと、それがどのように機能するかについてのロジックに関する可能な限り簡単な説明を手伝っていただけませんか?これは他の多くの初心者を助けると確信しています。


7
boost :: threadとboost :: mutexを同等のc ++ 11に置き換えるのは賢明ですか?
動機:私が検討している理由は、私の天才プロジェクトマネージャーが、ブーストは別の依存関係であり、「あなたはそれに依存している」ために恐ろしいと思っているためです(ブーストの品質について説明しようとしましたが、しばらくしてから断念しました:( )。私がそれをしたい小さな理由は、人々がコードを書き始めるので、私はc ++ 11の機能を学びたいということです。 #include<thread> #include<mutex>同等のものの間で1:1のマッピングがありますか? boostのものをc ++ 11の ものに置き換えることをお勧めしますか?私の使用法は原始的ですが、stdが何を後押しするのか提供しない例はありますか?または(冒とく)その逆ですか? PS私はGCCを使用しているため、ヘッダーがあります。

5
.NET Frameworkの同時HashSet <T>?
次のクラスがあります。 class Test{ public HashSet&lt;string&gt; Data = new HashSet&lt;string&gt;(); } "Data"フィールドを別のスレッドから変更する必要があるので、現在のスレッドセーフな実装についていくつかの意見をお願いします。 class Test{ public HashSet&lt;string&gt; Data = new HashSet&lt;string&gt;(); public void Add(string Val){ lock(Data) Data.Add(Val); } public void Remove(string Val){ lock(Data) Data.Remove(Val); } } 直接現場に行き、複数のスレッドによる同時アクセスから保護するためのより良い解決策はありますか?

5
ロックされていないミューテックスのロックはどの程度効率的ですか?ミューテックスのコストはいくらですか?
低レベル言語(C、C ++など):ミューテックスの束(pthreadが提供するものやネイティブシステムライブラリが提供するものなど)とオブジェクトの単一のミューテックスのどちらを使用するかを選択できます。 ミューテックスをロックすることはどのくらい効率的ですか?つまり、アセンブラー命令はいくつありますか。また、それらにかかる時間(ミューテックスがロック解除されている場合)はどれくらいかかりますか? mutexの費用はいくらですか?ミューテックスを本当にたくさん持つのは問題ですか?または、私がint変数を持っているのと同じくらい多くのミューテックス変数をコードにスローすることはできますか? (ハードウェアの違いはどれくらいかわかりません。ある場合は、それについても知りたいのですが、ほとんどの場合、共通のハードウェアに興味があります。) 重要なのは、オブジェクト全体に対して単一のミューテックスではなく、オブジェクトの一部のみをカバーする多くのミューテックスを使用することで、多くのブロックを安全にできることです。そして、これについてどこまで行けばいいのかと思っています。つまり、どれほど複雑で、これが何個のミューテックスを意味するかに関係なく、可能なブロックを可能な限り安全に保護する必要がありますか? ロックに関するWebKitsブログ投稿(2016)は、この質問に非常に関連しており、スピンロック、アダプティブロック、futexなどの違いについて説明しています。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.