我想暫停一個線程直到另一個線程完成初始化而不使用pthread_join。 我嘗試使用一個連接,但由於我們有一些異步的線程間通信系統,導致死鎖。 現在,我正在使用(自定義)鎖來實現此目的。等待pthread_create完成而不使用pthread_join
在線程1:
lock_OfflineWorker.Lock()
if (pthread_create(&tid0, NULL, RunOfflineWorker, NULL) != 0)
{
}
lock_OfflineWorker.TryLock();
lock_OfflineWorker.Unlock();
在主題2:
bool OfflineWorker::Initialize()
{
lock_OfflineWorker.Unlock();
}
但是,這是不雅的,我也不太清楚有關的副作用(可能爲另一個死鎖)。 這是好嗎? 如果沒有,是否有另一種方式來實現這一目標(用鎖或其他方式)
編輯:忘了包括「RunOfflineWorker」功能
void* RunOfflineWorker(void* pData)
{
g_OfflineWorker.Initialize();
}
OfflineWorker執行初始化,然後繼續執行其他一些工作,對嗎? – jpalecek 2009-04-08 12:32:35
是的。實際功能的底部有一個返回。它執行一些心跳的操作(庫函數),但不執行任何繁重的操作。 – Gayan 2009-04-08 12:36:06
您不能(可移植地)從其鎖定的其他線程中解鎖pthread互斥鎖。請參閱http://opengroup.org/onlinepubs/007908775/xsh/pthread_mutex_lock.html。如下所示使用條件變量。 – Doug 2009-04-08 13:01:39