проблема pthread_cond_broadcast

Используя pthreads в Linux 2.6.30 я пытаюсь отправить одиночный сигнал, который заставит несколько потоков начинать выполнение. Широковещательная передача, кажется, только получена одним потоком. Я попробовал и pthread_cond_signal и pthread cond_broadcast, и у обоих, кажется, есть то же поведение. Для взаимного исключения в pthread_cond_wait я попробовал и общие взаимные исключения и отдельные (локальные) взаимные исключения без очевидной разницы.


worker_thread(void *p)
{
   // setup stuff here

   printf("Thread %d ready for action \n", p->thread_no);
   pthread_cond_wait(p->cond_var, p->mutex);
   printf("Thread %d off to work \n", p->thread_no);

   // work stuff
}

dispatch_thread(void *p)
{
   // setup stuff

   printf("Wakeup, everyone ");
   pthread_cond_broadcast(p->cond_var);
   printf("everyone should be working \n");

   // more stuff
}

main()
{
   pthread_cond_init(cond_var);

   for (i=0; i!=num_cores; i++) {
      pthread_create(worker_thread...);
   }

   pthread_create(dispatch_thread...);
}

Вывод:


  Thread 0 ready for action
  Thread 1 ready for action
  Thread 2 ready for action
  Thread 3 ready for action
  Wakeup, everyone
  everyone should be working
  Thread 0 off to work

Что хороший путь состоит в том, чтобы отправить сигналам во все потоки?

5
задан Russ 18 October 2010 в 22:47
поделиться