Потоковое взаимодействие в unix

#c #windows #multithreading #unix #pthreads

#c #Windows #многопоточность #unix #pthreads

Вопрос:

я написал программу, в которой основной поток создает поток и отправляет событие всякий раз, когда вторичный поток должен работать, это отлично работает в Windows, но при переносе того же самого в * nix трудно добиться того же самого.

позвольте мне объяснить, пожалуйста, учтите следующее

 /* thread2 function */
thread_function_call()  
{  
   /* be a consumer */

 pthread_exit();  
}  


/* main function */  
main()  
{  

  /* create a thread */  
  pthread_create();  

  while(1)  
   {  
       /* produce the stuff for consumer or thread2 */  
        /* generate the event */  
   }   

 pthread_join();  
}  
  

Здесь основной поток находится в непрерывном цикле, а затем запускает событие / вызывает thread2, как только он запускает событие / вызывает thread2, функция thread2 должна выполняться.

это что-то вроде проблемы производителя и потребителя, пожалуйста, учтите, что все условия синхронизации соблюдены.

пожалуйста, помогите мне, как наилучшим образом мы можем этого достичь

Комментарии:

1. Спасибо Андерсу К. за правильное редактирование кода

Ответ №1:

Общий способ реализовать производителя-потребителя с помощью pthreads — это использовать переменную условия. Потоки-потребители блокируются pthread_cond_wait() , и производитель сигнализирует об этом с помощью pthread_cond_signal() или pthread_cond_broadcast() .

Комментарии:

1. спасибо, но я уже пробовал это, поток-потребитель должен запускаться только тогда, когда он подает сигнал, а в остальное время это необходимо для установки условной переменной.

2. @Venkat: Вам придется лучше объяснить, в чем проблема, с которой вы столкнулись.