操作系统是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)
| 归档时间: |
|
| 查看次数: |
903 次 |
| 最近记录: |