pthread_yield vs. sleep

pthread_yield()sleep() 의 차이를 묻는 Stack Overflow 글 의 답을 발췌한다.

pthread_yield() 는, 호출한 쓰레드가 프로세서 사용을 그만두고, 스케쥴링이 될 때 까지 작업 큐(run queue)에서 기다립니다. 만약 호출되었을 때 작업 큐가 비어 있다면, 즉시 스케쥴링이 되겠죠.

sleep() 은 X초만큼 지나거나, 무시할 수 없는 시그널이 도착할 때 까지 (다른 쓰레드를 포함한) 호출 프로세스를 재웁니다.

현재 쓰레드를 실제로 지연시키고 싶지 않지만 (호출 쓰레드 대신) 다른 쓰레드에게 실행권을 넘겨주고 싶은 경우라면, sleep() 보단 pthread_yield() 가 적합할 것 같습니다.

sleep 자체가 프로세스를 아예 멈추게 하니까 pthread_yield 를 통해서 나는 잠시 빠져주는 상태로 만드는 거였다. 코드를 보면서 감으로만 ‘아 저건 sleep() 같진 않지만 뭔가 이럴 때 쓰는거야’ 라고만 어렴풋이 알고 있었는데, 무엇이든 확실히 알아야 한다.


Hugo로 만듦 / JimmyStack 테마 사용 중