Я не совсем уверен, возможно ли сделать то, что я собираюсь спросить, поэтому я подумал, что я буду спрашивать.
У меня есть многопоточная программа, где потоки совместно используют блок памяти для связинеобходимая информация.Одной из данных является завершение потоков, где потоки постоянно проверяют это значение, и когда значение изменяется, они знают, что пришло время для pthread_exit()
.Один из потоков содержит функцию listen()
и, кажется, ждет бесконечно.Это может быть проблематично, если нет никого, кто хочет установить соединение, и поток должен выйти, но он не может проверить значение, должен ли поток завершаться или нет, так как он застрял на listen()
и не может выйти за пределы.
while(1)
{
listen();
...
if(value == 1)
pthread_exit(NULL);
}
Моя логика выглядит примерно так, если она помогает лучше проиллюстрировать мою точку зрения.Я подумал, что это решит проблему - позволить listen () ждать некоторое время, и если ничего не происходит, он переходит к следующему утверждению.К сожалению, ни один из двух аргументов listen()
не имеет ограничения по времени.Я даже не уверен, правильно ли я поступаю с многопоточным программированием, у меня совсем немного опыта.Так это хороший подход?Возможно, есть лучший способ сделать это?Спасибо за любые проницательные комментарии.
РЕДАКТИРОВАТЬ: просто чтобы уточнить, причина listen()
в цикле while в том, что это сервер и будет подключен к нескольким клиентам одновременно.