私の要件は次のとおりです
- 複数のスレッドを持つプロセスがあります。
- スレッドの 1 つ (T1) は、ユーザー イベントによってトリガーされます。
- 別のスレッド (T2) で実行する必要があるタスクがあり、T1 によって生成される必要があります。
- ここで、T1 は、システムが T2 のタスクをまだ実行していないことを確認する必要があります。そうでない場合は、T2 を生成してから終了する必要があります。T2 がまだ実行されている場合は、エラーをログに記録して T1 から戻る必要があります。T2 が完了するまで T1 を保持したくありません。
- 通常、T2 には長い時間がかかります。したがって、T2 が終了する前に T1 がトリガーされた場合、エラーが返されます。
- T2 のスレッドを 2 つ持つべきではないという意図はありません。
これを行うためにミューテックスとセマフォを使用していますが、もっと簡単な方法があるかもしれません。これが私がすることです。
Mutex g_mutex;
Semaphore g_semaphone;
T1:
if TryLock(g_mutex) succeeds // this means T2 is not active.
spawn T2
else // This means T2 is currently doing something
return with an error.
wait (g_sempahore) // I come here only if I have spawned the thread. now i wait for T2 to pick the task
// I am here means T2 has picked the task, and I can exit.
T2:
Lock(g_mutex)
signal(g_semaphore)
Do the long task
Unlock(g_mutex)
そして、これはうまくいきます。しかし、これを行うより簡単な方法があるかどうか知りたいです。