2012-12-04 3 views
0

boost::interprocess_mutex을 사용하는 프로젝트에서 작업하고 있습니다. 심지어 애플리케이션이 심지어 아이들 fork()의 자식 일지라도 멀티 스레딩에 크게 의존합니다.boost :: interprocess_mutex 대 로컬 처리 boost :: mutex

interprocess_mutex 모든 것들을 프로세스 뮤텍스로 바꿀 수 있다고 가정하는 것이 맞습니까?

최소한의 요인으로 만 성능을 향상시킬 수 있다고 생각합니까?

단일 (선택적으로 멀티 스레드) 프로세스 내에서 프로세스 간 동기화를 사용하는 이유는 무엇입니까?

+0

공유 메모리를 사용합니까? 여러 응용 프로그램에서 사용하는 메모리입니까? 그게 전부다. 포크 할 필요가 없다. 리소스를 공유하는 다른 코드베이스 (별도의 실행 파일)가있을 수있다. (하지만 그렇지 않다면 정상적인 뮤텍스를 사용할 수 있다고 생각할 것입니다 ***) – Caribou

답변

3

공유 메모리 또는 다른 IPC 메커니즘을 사용합니까? 여러 응용 프로그램에서 사용하는 메모리입니까? 테스트가 끝났습니다 ...

포크 할 필요가 없습니다. 리소스를 공유하는 다른 코드베이스 (개별 실행 파일)가있을 수 있습니다. 예를 들어, 일부 IPC 메커니즘을 통해 실행될 때 앱에서 통계를 가져 오는 모니터링 애플리케이션 또는 인터페이스가 있습니까? 그것을하는 다른 더 나은 방법이 있을지도 모른다, 다만보기이다.

http://www.boost.org/doc/libs/1_52_0/boost/interprocess/sync/windows/mutex.hpp

http://www.boost.org/doc/libs/1_52_0/boost/interprocess/sync/posix/mutex.hpp

가 오버 헤드가와 (안전한 경우) 당신에게 효율성을 얻을 수있는 로컬 버전으로 교체 :

헤더에서 찾고있다. 나는 정직하게 Posix 구현에 익숙하지 않다.

위에서 말했듯이, 외부 앱이 공유 메모리를 사용하여 통계를 얻거나 통신하는 경우 IPC를 사용할 수 있습니다.하지만 그렇지 않은 경우 대체 할 수 있습니다.