不间断执行 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 其他操作的干扰。
您好,在 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 其他操作的干扰。