ОС - это 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