操作系统是Linux,使用pthreads

我有两个永远运行的工作线程,直到stop变量的值为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

最佳答案

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

07-24 09:46
查看更多