2012-12-13 5 views
0

많은 스레드가 (아마도 pthread_kill에 의해 생성 된) 신호를 스레드로 보냈다 고 상상해보십시오. 그러나 스레드는 즉시 스레드를 배치 할 수 없습니다. 이 신호가 없어지겠습니까? 다른 스레드에서 이러한 singals을 diliveried 해결하는 방법? 참조 또는 경험이 있으십니까? ur 고려를위한 tks.스레드가 즉시 신호를 배포 할 수 있습니까?

+0

죄송 합니다만, 실제로, 다른 스레드에서이 노래를 어떻게 저장합니까? –

+0

OS가 POSIX를 준수하면 OS가 해당 OS를 "저장"합니다. – chill

답변

0

신호가 특정 스레드로 보내지고 현재 차단 된 경우 스레드에서 보류 상태를 유지합니다. 차단 해제 된 경우 (예 : pthread_sigmask 경유) 적절한 신호 조치가 수행됩니다.

추신. 그들이 대기열에 놓인 신호 (참조 : sigqueue)가 아닌 한, 다중 신호 중 하나 일지 여부에 대한 정보는 손실됩니다.

+0

스레드가 신호를 배치하고 동작 기능을 실행하려고하면 현재의 순차적 인 작업을 중단해야합니까? 아니면 OS가 신호를 배포하기 위해 스레드를 도울 수 있습니까? –

1

예, "손실"되었습니다. 신호는 대기열에 있지만 (1), 단순히 설정되고 해제되는 플래그입니다. 따라서 첫 번째 신호 이후에 도착하지만 신호가 처리되기 전에 도착하는 여러 신호는 아무 효과가 없습니다.

해결 방법은 메시지 전달 (실제로는 대부분의 경우)을 위해 유닉스 신호를 사용하지 않는 것입니다. 뮤텍스와 조건 변수의 도움으로 메모리를 통해 통신.

[1] 실시간 신호는 대기열에 넣을 수 있으며 최소한 제한 내에있을 수 있으며 자체적 인 문제가 있습니다.

+0

[스레드 제어 블록] (http://www.cse.iitd.ernet.in/~soumyadeb/projects/mtp/report/node56.html)의 구조에서 신호에 대한 플래그를 찾지 못했습니다. –

+1

@NickDong, 아마도이 커널은 (POSIX) 신호를 구현하지 않습니다. – chill

관련 문제