2009-11-19 2 views

답변

6

예. 유닉스 fcntl 잠금 (및 파일 시스템 자원은 일반적으로)은 시스템 전반에 걸쳐 존재하므로, 두 개의 실행 스레드가 프로세스를 분리하거나 분리하여 사용할 수 있습니다. 그게 좋은 생각인지 아닌지는 상황에 따라 다릅니다. 프로세스간에 동기화하는 한 가지 방법은,하지만 당신은 세마포어를 사용하지 않으려면, 당신은 POSIX 기반 플랫폼에서 PTHREAD_PROCESS_SHARED 속성으로 생성 된 뮤텍스와 조건 변수 등의 과정을 공유 뮤텍스를 사용할 수

+0

감사합니다. 제 질문은 제가이 일을하고 싶은지 아닌지를 결정했습니다. 그리고 그것이 가능하다는 것이 밝혀졌습니다. 다시 한번 감사드립니다. –

1

(참조 pthread_mutexattr_setpshared()pthread_condattr_setpshared()). 또 다른 옵션은 정의한 이벤트가 역 다중화 (예 : select()) 될 때까지 차단하는 이벤트 기반 IPC (소켓 등) 메커니즘을 사용하는 것입니다. 다른 여러 가지 공유 메모리 기반 옵션도 있습니다.

그러나 C++을 사용하고 있으므로 boost.interprocess 또는 ACE과 같은 여러 플랫폼에서 이러한 종류의 프로세스 간 동기화를 크게 단순화하는 C++ 프레임 워크를 사용하는 것이 좋습니다.

-1

fcntl과 flock은 스레드가 아니고 프로세스 용이므로 스레드 동기화에 사용할 수 없습니다.

+0

fcntl에 다중 스레드 거짓 데드 록 검사 (디자인 결함)가 있습니다. 두 시나리오 모두 두 개의 스레드가있는 두 가지 프로세스를 생각해보십시오. 스레드 1은 다음과 같습니다 : for (;;) {fcntl_auto_lock (file1);}. 스레드 2는 다음과 같이 보입니다 : for (;;) {fcntl_auto_lock (file2);}. fcntl은 EDEADLK (35)를 반환합니다. 자세한 내용은 다음을 참조하십시오. https://bugzilla.mozilla.org/show_bug.cgi?id=62457#c5 – alpha

관련 문제