Я создал класс 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);
(...)
}
любая помощь будет оценена