[Philosophers] 허용함수 - usleep, gettimeofday

Jiwon-Woo·2021년 9월 12일
0

usleep

man page

#include <unistd.h>

int	usleep(unsigned int microseconds);

/*
성공시 0을 반환하고, 그 외에는 -1을 반환함과 동시에 전역변수 errno에 해당 오류값을 세팅한다.
*/

usleep 함수는 인자로 받은 마이크로초(100만분의 1초)가 경과하거나 프로세스에 신호가 전달될 때까지 프로세스의 실행을 일시 중단한다. sleep 함수는 프로세스를 중지하는 단위가 마이크로초가 아닌 초 단위라는 점만 usleep 과 다를 뿐 프로세스를 잠시 멈추는 기능은 동일하다.

usleep(1000000)sleep(1) 는 유사한 기능 수행!


gettimeofday

man page

#include <sys/time.h>

int	gettimeofday(struct timeval *tp, struct timezone *tzp);

/*
성공시 0을 반환하고, 그 외에는 -1을 반환함과 동시에 전역변수 errno에 해당 오류값을 세팅한다.
*/
struct timeval {
        long    tv_sec;         /* 1970년 1월 1일부터의 초수 */
        long    tv_usec;        /* 및 마이크로 세컨드수 */
};

struct timezone {
        int     tz_minuteswest; /* 그리니지로부터 서방향에의 편차 */
        int     tz_dsttime;     /* 서머타임 보정의 타입 */
};

사용 방법

#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>

int	main(int argc, char **argv)
{
	struct timeval	start_time;
	struct timeval	end_time;
	long	diff_sec;
	long	diff_usec;
	double	diff_time;


	gettimeofday(&start_time, 0);	// usleep 전 시작 시간 저장
	usleep(1500000);		// 1.5초간 프로세스 중지
	gettimeofday(&end_time, 0);	// usleep 후 시간 저장


	diff_sec = end_time.tv_sec - start_time.tv_sec;		// 초단위
	diff_usec = end_time.tv_usec - start_time.tv_usec;	// 마이크로초 단위
	diff_time = diff_sec + ((double)diff_usec / 1000000);	// 총 초가 흘렀는지 계산

	printf("diff_sec : %lu\n", diff_sec);
	printf("diff_usec : %lu\n", diff_usec);
	printf("diff_time : %f\n", diff_time);
}
diff_sec : 1
diff_usec : 505151
diff_time : 1.505151

0개의 댓글