2011-07-05 4 views
1

저는 리눅스에서 일하고 있는데 pthread_rwlock을 사용하고 있습니다. 공유 메모리에 저장되고 여러 프로세스에서 공유됩니다. 이것은 대부분 잘 작동하지만, 잠금 장치가있는 동안 프로세스 (SIGKILL)를 죽이면 잠금 상태가 계속 유지됩니다 (읽기 잠금인지 쓰기 잠금인지 여부는 관계 없음).프로세스 간 pthread_rwlock : 충돌 후 복구?

그런 상태를 인식하고 복구 할 수있는 방법이 있습니까?

답변

1

진짜 대답은 적절한 방법으로 프로세스를 중지하는 것입니다. SIGKILL으로 죽이는 것은 이 아니라입니다.

이 기능은 전화 견고성 (PTHREAD_MUTEX_ROBUST) 하지만 rwlocks에를 들어, mutexes 지정됩니다. 표준은 그것을 제공하지 않으며 kernel.org는 rwlocks에 대한 페이지조차 가지고 있지 않습니다. 그래서처럼 말했다 : (? 처리 할 수 ​​있습니다 아마도 다른 신호)

  • 이 프로세스를 중지하는 또 다른 방법을 찾기는
+0

필자는 내 솔루션의 견고성을 테스트하기 위해 SIGKILL을 특별히 사용했습니다. – mooware

1

@cnicutar를 종료 할 때

  • 가 잠금을 해제 - 진짜 "그 대답 "은 꽤 모호합니다. 리소스를 해제하고 일관된 것으로 표시되는 프로세스 간 책임을 처리하는 것은 커널의 임무입니다. 사용자 공간은 물건이 잘못되었을 때 효과적으로 작업을 수행 할 수 없습니다.

    모든 사람이 멋지게 연출할 수 있으면 좋지만 강력한 시스템의 경우 시스템이 버그가있는 클라이언트 프로세스에서 중단되지 않도록하고 싶습니다.