不间断执行 Cpp Linux 代码

uninterrupted execution of Cpp Linux code

您好,在 Linux GNU 中,有没有一种方法可以使我的代码免受其他 OS 中断等的影响?例如,如果我有下面的代码,我需要找到准确的执行时间,而不会被其他东西打断我的代码。

我已经调查了 pthread_mutex_lock(&cs_mutex);,但无法停止对 运行 的其他操作。

while(1){
//start some method to block other OS overheads
c_start=clock();
some_function();
c_end=clock();
//stop OS overhead block
//calculate time 
}

您可以使用 clock_gettime:

timespec ts;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts);

它不会阻止其他进程中断您的代码,但它只会在考虑此类中断的情况下计算 您的 进程的执行时间.

您不能锁定整个系统来获取只有您的程序使用的经过时间。如果看一下简单的 time 命令,您会发现 OS 知道哪个时间用于您的应用程序以及哪个时间用于系统的其他操作:

[krud@unknown001742754ee6 ~]$ time sleep 1

real    0m1.025s
user    0m0.000s
sys     0m0.001s

如您所见,睡眠命令需要一秒多一点,但在用户级别只消耗 "nothing" 但在系统模式下只消耗几微秒。

如果您想查看代码的每个函数需要多少时间,请使用像 gprof 这样的分析器。该工具还可以为您提供 prog 功能消耗的确切时间,几乎不受 box 其他操作的干扰。