URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4539
[ Назад ]

Исходное сообщение
"pthread_cond_wait и загрузка процессора"

Отправлено leha , 03-Авг-05 14:23 
Есть замечательная функция pthread_cond_wait, которая, как заявлено, останавливает процесс до прихода сигнала "из вне" на его разблокирование функцией pthread_cond_signal. В книге "Программирование для Linux. Профессиональный подход" (Марк Митчелл и др.) даже дан пример на использование этих функций (глава 4.4.6). Там же авторы говорят о том, что pthread_cond_wait избавляет нас от траты процессорного времени впустую.
Самое смешное, то, что процесс действительно останавливается на этой функции  и ждет сигнала, НО при этом загрузка процессора 99%. Есть ли решение этой проблемы? Необходимо чтобы поток действительно остановился и разгрузил процессор.

Содержание

Сообщения в этом обсуждении
"pthread_cond_wait и загрузка процессора"
Отправлено Maxim Kuznetsov , 03-Авг-05 14:35 
>Есть замечательная функция pthread_cond_wait, которая, как заявлено, останавливает процесс до прихода сигнала
>"из вне" на его разблокирование функцией pthread_cond_signal. В книге "Программирование для
>Linux. Профессиональный подход" (Марк Митчелл и др.) даже дан пример на
>использование этих функций (глава 4.4.6). Там же авторы говорят о том,
>что pthread_cond_wait избавляет нас от траты процессорного времени впустую.
>Самое смешное, то, что процесс действительно останавливается на этой функции  и
>ждет сигнала, НО при этом загрузка процессора 99%. Есть ли решение
>этой проблемы? Необходимо чтобы поток действительно остановился и разгрузил процессор.

а у вас в другой нити нет случайно бесконечного цикла ?
99% что есть..во кривых примерах любят применять while(1);



"pthread_cond_wait и загрузка процессора"
Отправлено leha , 03-Авг-05 14:52 

>а у вас в другой нити нет случайно бесконечного цикла ?
>99% что есть..во кривых примерах любят применять while(1);

Есть!
while(1)
{
...
pthread_cond_wait(cv, mutex); <- здесь я останавливаюсь
...
}

Факстически я стою в нужном месте (проверял) и while(1) не должен мешать.


"pthread_cond_wait и загрузка процессора"
Отправлено Maxim Kuznetsov , 03-Авг-05 15:01 
>
>>а у вас в другой нити нет случайно бесконечного цикла ?
>>99% что есть..во кривых примерах любят применять while(1);
>
>Есть!
>while(1)
>{
>...
>pthread_cond_wait(cv, mutex); <- здесь я останавливаюсь
>...
>}
>
>Факстически я стою в нужном месте (проверял) и while(1) не должен мешать.
>
я про ДРУГУЮ нить говорил...которая параллельно крутиться..
в большинстве примеров про pthread из книги в книгу качует
много ерунды навроде :
int main() {
pthread_create()
pthread_create()
while(1)
;
}


"pthread_cond_wait и загрузка процессора"
Отправлено leha , 03-Авг-05 15:12 

>я про ДРУГУЮ нить говорил...которая параллельно крутиться..
>в большинстве примеров про pthread из книги в книгу качует
>много ерунды навроде :
>int main() {
>pthread_create()
>pthread_create()
>while(1)
> ;
>}
нет, там все банально:

(void) fgetc (stdin); //жду нажатия Enter
...
pthread_cond_signal(cv); // сигнал потоку, что можно продолжать
...
(void) fgetc (stdin); //жду нажатия Enter


"pthread_cond_wait и загрузка процессора"
Отправлено leha , 03-Авг-05 16:04 

Мои глубокие извинения, как раз

(void) fgetc (stdin); //жду нажатия Enter

и нагружает процессор.