2016-10-31 1 views
2

안녕하세요, 리눅스 GNU의 다른 OS 인터럽트 등으로부터 내 코드를 안전하게 할 수있는 방법이 있습니까? 예를 들어, 아래 코드가 있고 코드 실행을 방해하지 않는 정확한 실행 시간을 찾아야합니다.Cpp 리눅스 코드의 중단없는 실행

나는 이미 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 
} 
+0

정말로 하시겠습니까? 가능하면 코드가 실행되는 동안 시스템이 완전히 정지 될 수 있습니다. 화면을 업데이트하지 않고 마우스를 움직이거나 아무 것도하지 않습니다. 프로파일 러를 더 잘 사용하십시오. – Axel

답변

2

당신은 clock_gettime를 사용할 수 있습니다

timespec ts; 
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts); 

그것은 당신의 코드를 중단 다른 프로세스를 방지하지 않습니다하지만 것이다 유일한 시간 의 실행 귀하의 계정에 같은 인터럽트를 복용 과정.

0

사용자의 프로그램에서만 사용되는 경과 시간을 얻으려면 전체 시스템을 잠그지 마십시오.

[[email protected] ~]$ time sleep 1 

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

당신이 볼 수 있듯이, 수면 : 당신이 간단한 time 명령 보는 경우에, 당신은 당신이 OS 응용 프로그램으로 이동하는 시간이 알고있는 시간은 시스템의 다른 작업에 사용 된 것을 알 수 있습니다 명령은 1 초 이상 걸리지 만 사용자 수준에서는 "아무것도"소비하지 않지만 시스템 모드에서는 몇 마이크로 초 정도만 소모합니다.

각 코드 기능에 필요한 시간을 확인하려면 gprof과 같은 프로파일 러를 사용하십시오. 이 도구는 상자의 다른 동작에서 거의 방해받지 않고 프로그램의 기능에 의해 소비되는 정확한 시간도 제공합니다.