2014-03-28 1 views
0

클라이언트 연결을 처리하기 위해 수락 호출 후 분기하는 웹 서버에 대한 요청 통계를 나타내는 공유 리소스가 있습니다. 어떤 신호가 부모 프로세스에 의해 잡힐 때 stderr에이 통계를 인쇄하고 싶습니다. 그러나 stats 구조체는 세마포어로 보호됩니다. 교착 상태로 인해 시그널 핸들러에서 세마포어를 잠 그거나 잠금 해제하는 것은 나쁜 생각입니다. 문제. 나는 SIG 처리기에 플래그를 설정하고 accept() 후 EINTR를 먼저 확인한 다음 플래그를 확인하여 플래그가 설정된 경우 상위 프로세스에서 통계를 인쇄하려고 시도했지만 작동하지 않았습니다. 어떤 아이디어?신호 처리기 내에서 공유 리소스로부터 읽기

+0

그래서 나는이 문제를 해결할 방법을 찾은 것 같습니다. 기본적으로 sigaction()으로 시스템 콜을 자동으로 다시 시작하고 EINTR에 대한 accept()의 리턴 값을 확인하는 것이 효과가있는 것 같습니다. – usddddd

답변

0

인터럽트 처리기 컨텍스트에서 잠금을 설정하거나 플래그를 설정하는 대신 __sync_fetch_and_add와 같은 기본 작업을 사용하여 통계 변수를 읽을 수 있습니까?