pthreads, как мне узнать, что другой поток внутри процесса не ожидает?

ОС - это Linux, работающая с pthreads

У меня есть два рабочих потока, которые работают вечно, пока стоп-переменная не примет значение true, и потоки не завершатся корректно. Вместо ожидания занятости оба потока вызывают pthread_cond_wait, пока сигнал не уведомит о новой задаче. Система работает хорошо.

Требуется создать информационный поток, который будет печатать некоторую отладочную информацию. Информационный поток будет пытаться читать и распечатывать информацию каждые 30 секунд. Я хотел бы, чтобы часть этой информации была СОСТОЯНИЕМ каждого рабочего потока. Можно ли узнать, заблокирован ли поток в "pthread_cond_wait"? Если поток ожидает pthread_cond_wait, тогда STATE == ожидает, иначе STATE == выполняется.

 while ( (sharedvaluffer == 0) && (doneflag == 0) ) {
            pthread_cond_wait (&taks_added, &buffer);
        }    

Конечно, мы можем сделать это с помощью большего количества кода. Мы можем добавить к приведенному выше фрагменту глобальную переменную, которая отмечает этот поток как заблокированный. Код можно сделать

while ( (sharedvaluffer == 0) && (doneflag == 0) ) {
                lock;
                i_am_waiting = truel
                unlock
                pthread_cond_wait (&taks_added, &buffer);
 } 

Вопрос в том, есть ли более простой и масштабируемый способ. Стек ожидающего потока

Thread 6 (Thread 0x40800940 (LWP 20732)):
#0  0x00002ba4567a9326 in pthread_cond_wait@@GLIBC_2.3.2 ()
#1  0x00000000007ce2ed in worker(void*) ()
#2  0x00002ba4567a5193 in start_thread () from /lib64/libpthread.so.0
#3  0x00002ba458a82f0d in clone () from /lib64/libc.so.6
8
задан cateof 30 November 2011 в 15:59
поделиться