pthreads,我怎么知道进程内的另一个线程没有等待?

cat*_*eof 8 c linux pthreads

操作系统是Linux,使用pthreads

我有两个永远运行的工作线程,直到一个stop变量值为true,并且线程正常终止.而不是忙于等待两个线程调用pthread_cond_wait直到信号通知新任务.该系统运作良好.

要求创建一个"info"线程,它将打印一些调试信息.信息线程将尝试每30秒读取和打印信息.这个信息的一部分,我想成为每个工作线程的状态.是否可以在"pthread_cond_wait"中查找线程是否被阻止?如果线程等待是pthread_cond_wait,那么STATE ==等待其他STATE ==运行.

 while ( (sharedvaluffer == 0) && (doneflag == 0) ) {
            pthread_cond_wait (&taks_added, &buffer);
        }    
Run Code Online (Sandbox Code Playgroud)

当然,我们可以做更多的代码.我们可以在上面的代码片段中添加一个全局变量,将该线程标记为已锁定.代码可以完成

while ( (sharedvaluffer == 0) && (doneflag == 0) ) {
                lock;
                i_am_waiting = truel
                unlock
                pthread_cond_wait (&taks_added, &buffer);
 } 
Run Code Online (Sandbox Code Playgroud)

问题是,如果有一种更容易扩展的方式.等待线程的堆栈是

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
Run Code Online (Sandbox Code Playgroud)

jwe*_*ich 0

您可以使用返回pthread_self()作为互斥体所有权的标识符。存储并比较。由于互斥锁可以由单个线程立即获取,因此您将知道哪个线程正在运行(不等待),哪个线程没有运行。