2009-10-29 5 views
4

멀티 스레드 프로그램이 mq_send를 실행하는 동안 SIGSTOP 신호를 받으면 어떤 일이 일어날 지 아무에게도 말할 수 있습니까?mq_send가 원자입니까?

+0

그래서 나는 내 리눅스 박스 (Linux home 2.6.31-11- generiC# 38-Ubuntu SMP Fri Oct 10 : 11 : 06 : 40 UTC 2009 x86_64 GNU/Linux)에서 몇 가지 테스트를 해봤 다. , 그러나 나는 100 % 확실하지 않다. 만약 누군가가 정확한 답을 알고 있거나 mq_send가 어떻게 작동하는지 알고 있다면 우리와 정보를 공유하는 것이 좋을 것입니다 :) – iddqd

답변

2

mq_send에 대한 설명서 페이지는 Linux에서 시스템 호출 인 mq_timedsend 위에 구현되었음을 나타냅니다. 시스템 호출은 일반적으로 성공하거나 그렇지 않은 경우 원자 적입니다. 시스템 호출이 신호에 의해 인터럽트되면, 보통 -1을 리턴하고 errnoEINTR으로 설정합니다. mq_send에는이 동작이 있습니다.

기본적으로 EINTR을 확인하고이 방법으로 실패하면 다시 시도해야합니다. 이것은 시스템 호출이 특히 recv 또는 select과 같이 차단 될 가능성이 높습니다. 시스템 호출이 중단 될 확률이 높기 때문에 특히 중요합니다.