私は同じリソースにアクセスするために2つのスレッドを避けて、別のスレッドで実行したいところがあります。 また、スレッドが現在実行中の場合は、そのスレッドを停止して新しいスレッドの実行を開始するようにしたいと思います。これは私が持っているものです。特定のスレッドが次に実行される(リソースを取得する)ことを確認しますか?
volatile int threadCount = 0; // use it to know the number of threads being executed
private void DoWork(string text, Action OncallbackDone)
{
threadCount++;
var t = new Thread(new ThreadStart(() =>
{
lock (_lock) // make sure that this code is only accessed by one thread
{
if (threadCount > 1) // if a new thread got in here return and let the last one execute
{
threadCount--;
return;
}
// do some work in here
Thread.Sleep(1000);
OncallbackDone();
threadCount--;
}
}));
t.Start();
}
私はその方法を5回発射する場合はロックが解除されるまで、すべてのスレッドがロックを待機します。私は最後のスレッドを実行することを確認したい。スレッドがロックの所有者であることを待っているときに、ロックを所有している次のスレッドをどのように決定することができますか。私は彼らが私がスレッドを作成したために、リソースを所有したい...
EDIT
私は.NET 4.0でこのアプリケーションを作成しておりません。私が達成しようとしていたことを言及してくれなかったのは残念です。私は多くのデータをフィルタリングしているオートコンプリートコントロールを作成しています。メインウィンドウをフリーズする必要はありません。私は結果をフィルタリングしたいと思っています。また、ユーザーの入力時に結果をフィルタリングする必要があります。ユーザーが5文字を一度に入力すると、すべてのスレッドを停止したいので、最後のスレッドに興味があります。ロックはすべてのスレッドをブロックするため、作成した最後のスレッドが最初にロックを所有することがあります。
私は周りにそれを設計しようと思います* 1 *「自体を放棄する」「流れを変える」か、できることをサポートスレッド(またはBackgroundWorkerの)...複数のスレッドは毛むくじゃくし、後のものが来たら前のクエリに取り組む必要はありません。 –