0
我做了一個包含存儲向量和互斥體的Queue類。 要初始化隊列,需要啓動一個線程。爲了確保線程正確啓動,構造函數等待一個信號。線程函數是Queue類的一個朋友。但是,線程函數發送時信號未被註冊。爲什麼?Pthreads和類
Queue::Queue()
{
(...)
pthread_mutex_init(&mutex_cond_init, NULL);
Q_ready = false;
(...)
pthread_create(&thread_ID, NULL, Queue_function, this);
pthread_mutex_lock(&mutex_cond_init);
while(!Q_ready)
{
cout << "waiting" << endl;
pthread_cond_wait(&cond_init,&mutex_cond_init);
cout << "got signal" << endl;
}
pthread_mutex_unlock(&mutex_cond_init);
cout << "Queue open." <<endl;
}
void * Queue_function (void*arg)
{
(...)
Queue * S = (Queue*) arg;
pthread_mutex_lock(&(*S).mutex_cond_init);
(*S).Q_ready = true;
pthread_cond_signal(&(*S).cond_init);
pthread_mutex_unlock(&(*S).mutex_cond_init);
(...)
}
任何幫助,將不勝感激
你初始化了'cond_init'嗎?你的代碼只顯示'mutex_cond_init'的初始化。 –
此外,在釋放其析構函數中的資源的異常安全RAII風格的類中,您將從包裝資源(例如互斥鎖和互斥鎖)中受益匪淺。例如,看看C++ 0x中的boost :: mutex和std :: mutex是如何工作的。 –
那個伎倆,謝謝! – pjaall