2017-04-13 4 views
1

리눅스 박스 내에서 나는 다른 프로세스가 사용하는 시스템 리소스에 대한 액세스를 제어하기 위해 명명 된 세마포어를 사용하고 있습니다.시스템 재부팅 후 블록 된 명명 된 세마포어 처리하기

시스템이 실수로 고장난 경우 세마포어가 획득되었지만 아직 돌려 주어지지 않았을 수 있습니다. 그 상황을 감안할 때, 재부팅 후에도 세마포어는 여전히 잠긴 상태로 유지된다는 것을 알게되었습니다.

이러한 상황을 극복하기 위해 시스템 시작시 세마포어를 연결 해제 한 후 하나 이상의 프로세스에서 다시 사용하는 것이 좋습니까? 또는 semaphore가 해제 될 때까지 sem_post()를 제공하는 것이 더 좋을까요? BTW

:

내부에 저장 세마포어 있습니다

. 나는 그들이 왜 시스템 재부팅에서 살아 남았는지 궁금해. 여기에 대한 답변 (? 세마포어가 ... 내부에 저장되어 )

답변

2

두 번째 질문 : 간단히 말해서 sem_overview(7)

은 명명 된 세마포어 객체는 가상 파일 시스템에 저장됩니다. 의도적으로 시스템은 시스템이 종료 될 때까지 또는 sem_unlink(3)으로 제거 될 때까지 생존합니다.

약간의 Google 연구 조사에 따르면보고있는 문제가 흔하지 않은 것으로 나타났습니다. 시스템이 충돌하면 세마포어가 계속 표시됩니다.

그것은 일부 사람들은 심지어 예를 들어보고, 모두 세마포어를 사용하기위한 대안을 마련 문제의 충분 : 내가 파일에 쓰고 데 평행을 그릴 것입니다 귀하의 첫 번째 질문에 대해서는 How do I recover a semaphore when the process that decremented it to zero crashes?

을 프로세스 또는 시스템 충돌이 발생하거나 파일에 쓰여지고 내용이 아직 디스크로 플러시되지 않았습니다. 해당 파일의 상태 및 무결성은 그 시점에서 알 수 없습니다.

해당 시나리오를 세마포어 문제와 비교할 때 시스템 시작시 불량 세마포를 삭제하는 것이 가장 좋은 방법이라고 생각합니다.