我创建了一个包含存储向量和互斥锁的Queue类。 要初始化队列,需要启动一个线程。为确保线程正确启动,构造函数等待信号。线程函数是Queue类的朋友。但是,线程功能发送时不会注册信号。为什么呢?
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);
(...)
}
任何帮助将不胜感激
答案 0 :(得分:0)
您是否已初步化cond_init
?您的代码仅显示mutex_cond_init
的初始化。