ロックされたスレッドのいずれかが通過して何らかのタスクを完了した後、すべてのスレッドを解放したいと考えています。私が何をしたいかについてのサンプルコードを投稿しましょう。重要なのは、最初のスレッドが自分の仕事を完了した後、すべてを一緒に通過しなければならないということです。彼らは(残りの99スレッド)は、決して1つ1つを通過してロックされていないようにする必要があります。すべてのロックされたスレッドを解放する
Monitor.Enter(_lock);//imagine 100x threads hit this lock at same time.
//1 thread pass there
if (data == null)
{
data = GetData();
}
Monitor.Exit(_locker);//one more thread allow after this code.And they all come one by one in order.In these point I want to release them all together.
私はモニター、ミューテックス、セマフォ、ReadWriteLock、ManaualResetEventなどのようなスレッドが、私はこれを行うために管理していなかった程度のクラスの多くを試してみましたが、それらはすべて一つずつ来ます。あなたはこれをやったことがありますか?または、あなたはそれについてアリの考えを持っていますか?私はそれにもっと時間を費やしたくない。
このコードでは、CTSがキャンセルされると、すべての呼び出し元がクリティカルセクションを実行します。 – Servy
@Servyは、OPが求めているものとまったく同じではありませんか? – Daneau
値は*正確に1回構築する必要があります。 – Servy