2016-03-29 4 views
-2

Я работаю над многопоточным серверным приложением в Linux с использованием библиотеки pthread. Для каждого подключенного клиента есть два потока, поскольку я делаю два соединения с устройством и одним потоком имеет зависимость от других. Если не выполняется определенное условие. Первый цикл потока непрерывно в цикле while. Когда выполняется условие, второй поток устанавливает флаг и первый поток на основе этого, который прерывает цикл while и выполняет требуемые задачи.Как эффективно блокировать поток до тех пор, пока не будет выполнено какое-либо конкретное условие.

Выполняет цикл While непрерывно в потоке, пока конкретное условие не будет удовлетворительным. Если не указать более подходящий подход.

+1

Используйте 'mutex' и' condition'. –

+0

* Выполняет цикл While непрерывно в потоке, пока конкретное условие не будет удовлетворительным. * Нет. Создайте семафор. Попросите второй поток вызвать 'sem_wait()' в этом семафоре. Затем, когда первый поток удовлетворяет условию, вызовите его 'sem_post()'. Или просто используйте один поток. –

+0

Можете ли вы указать, что такое «особое» состояние? Вы хотите дождаться, когда файл/сокет будет читать или писать? Или это «флаг», который задан в другом потоке? Ожидаете ли вы только одно (простое) условие или ваше состояние более сложное (например, чтение из одного файла, запись в сокет и, кроме того, флаг из другого потока)? Также это поможет, если вы разместите (части) вашего источника. –

ответ

3

Вы уже используете pthreads, читаете: http://linux.die.net/man/3/pthread_cond_wait (или любой другой механизм синхронизации pthreads).

В общем, цикл while не требует ненужных циклов CPU.

+0

Для полноты официальной спецификации POSIX для 'pthread_cond_wait()': http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_timedwait.html – alk

+0

Существует еще целый океан сценариев, где прямая блокировка (while loop) более чем approriate. – SergeyA

+0

@SergeyA - Конечно, но я даже не могу думать о том, что один из них включает многопоточное серверное приложение в Linux с использованием библиотеки pthread " – Ofir

Смежные вопросы