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