在Linux/GNU/C环境中,正在运行的线程是否可以进入休眠状态是否可见。例如说您有一个类似的功能
void foo() {
startClock();
bar();
endClock();
}
但是您只关心代码本身的运行时间。 IE。您不必担心与运行期间挂起线程相关的任何时间。理想情况下,您将能够利用一些系统调用或库,例如countThreadSwitches(),这样:
void foo() {
int lastCount = countThreadSwitches();
startClock();
bar();
endClock();
if (countThreadSwitches() != lastCount)
discardClock();
}
能够判断线程是否已在两个语句之间切换,将使我们能够仅测量不受上下文切换影响的运行。
那么,有没有像假设的countThreadSwitches()那样的调用?还是该信息对线程本身是不透明的?
最佳答案
在Linux上,您可以从nonvoluntary_ctxt_switches:
中读取并解析/proc/self/status
行(最好最好是前后仅做一个4096字节的read()
,然后再进行解析)。
关于c - Linux/C : Check if context switch has occurred from inside thread,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40034464/