pthread_joinを使わずに別のスレッドが初期化を完了するまで、スレッドを停止したい。 私は結合を使用しようとしましたが、私たちが持っているいくつかの非同期スレッド間通信システムのためにデッドロックに繋がります。 今、私はこれを達成するために(カスタム)ロックを使用しています。スレッド1ではpthread_joinを使わずにpthread_createを終了するのを待つ
:
スレッド2ではlock_OfflineWorker.Lock()
if (pthread_create(&tid0, NULL, RunOfflineWorker, NULL) != 0)
{
}
lock_OfflineWorker.TryLock();
lock_OfflineWorker.Unlock();
:
bool OfflineWorker::Initialize()
{
lock_OfflineWorker.Unlock();
}
しかし、これは洗練されていないと私は副作用(別のデッドロックの可能性)についてあまりよく分かりません。 これはいいですか?ジョブが到達するまで待機するように忘れたあなたはpthreadの条件を使用することができます
void* RunOfflineWorker(void* pData)
{
g_OfflineWorker.Initialize();
}
OfflineWorkerは初期化を行い、その後他の作業を続行しますが、そうですか? – jpalecek
はい。実際の関数の最後にはリターンがあります。いくつかのハートビート操作(ライブラリ関数)を実行しますが、重い操作は行いません。 – Gayan
ロックされた別のスレッドからpthread mutexを(移植可能に)ロック解除することはできません。 http://opengroup.org/onlinepubs/007908775/xsh/pthread_mutex_lock.htmlを参照してください。下記のように条件変数を使用してください。 – Doug