#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: Вам придется лучше объяснить, в чем проблема, с которой вы столкнулись.