본문 바로가기

C Language

ft_usleep vs usleep

int ft_usleep(size_t milliseconds)
{
size_t start;

start = get_time();
while ((get_time() - start) < milliseconds)
usleep(500);
return (0);
}

ft_usleep 함수와 usleep 함수의 주요 차이점은 다음과 같습니다:

  1. 시간 단위:
    • ft_usleep: 밀리초(milliseconds) 단위로 동작합니다1.
    • usleep: 마이크로초(microseconds) 단위로 동작합니다12.
  2. 구현 방식:
    • ft_usleep: while 루프를 사용하여 지정된 시간 동안 대기합니다. 이는 더 정확한 타이밍 제어를 가능하게 합니다1.
    • usleep: 시스템 호출을 통해 직접 프로세스를 일시 중지시킵니다12.
  3. 정밀도:
    • ft_usleep: get_time() 함수를 사용하여 현재 시간을 주기적으로 확인하므로, 더 정확한 타이밍 제어가 가능합니다1.
    • usleep: 시스템의 타이머 해상도에 따라 정확도가 달라질 수 있습니다2.
  4. CPU 사용:
    • ft_usleep: while 루프 내에서 usleep(500)을 호출하여 CPU 사용을 줄이면서도 정확한 타이밍을 유지합니다1.
    • usleep: 시스템 호출을 통해 프로세스를 완전히 중지시키므로 CPU 사용이 더 적을 수 있습니다23.
  5. 인터럽트 처리:
    • ft_usleep: while 루프를 사용하므로 인터럽트 발생 시 남은 시간을 계산하여 계속 실행할 수 있습니다1.
    • usleep: 인터럽트 발생 시 중단되며, 남은 시간 정보를 제공하지 않습니다2.

ft_usleep 함수는 더 정확한 타이밍 제어와 인터럽트 처리를 위해 구현된 사용자 정의 함수로, usleep 함수의 한계를 보완하고 있습니다.

 

  1. 루프 조건: (get_time() - start) < milliseconds
    • 현재 시간과 시작 시간의 차이가 지정된 밀리초보다 작은 동안 계속 실행됩니다.
  2. 루프 내부 동작: usleep(500)
    • 500마이크로초(0.5밀리초) 동안 스레드를 일시 중지합니다.

이 구현의 목적:

  1. 정확성: 단순히 usleep(milliseconds * 1000)을 사용하는 것보다 더 정확한 타이밍을 제공합니다1.
  2. CPU 사용 최적화: 지속적으로 시간을 확인하면서도, 짧은 간격으로 스레드를 중지하여 CPU 사용을 줄입니다.
  3. 인터럽트 대응: 시스템 인터럽트로 인한 지연을 보정할 수 있습니다. 루프가 계속 실행되므로 정확한 시간을 유지할 수 있습니다.

이 방식은 시스템 타이머의 해상도 한계를 극복하고, 더 정밀한 시간 제어를 가능하게 합니다1.

 

'C Language' 카테고리의 다른 글

thread create 함수 설명  (0) 2025.03.15
포크락 수정  (0) 2025.03.15
철학자의 포크 할당 로직 설명  (0) 2025.03.14
공유 뮤텍스를 사용하는 이유와 예시  (0) 2025.03.14
mutex 입금문제  (2) 2025.03.13