파일에 fcntl() 시스템 호출을 사용하여 (semaphoress 대신) 스레드/프로세스 동기화를 수행 할 수 있습니까?스레드 또는 프로세스 동기화를위한 fcntl()?
답변
예. 유닉스 fcntl 잠금 (및 파일 시스템 자원은 일반적으로)은 시스템 전반에 걸쳐 존재하므로, 두 개의 실행 스레드가 프로세스를 분리하거나 분리하여 사용할 수 있습니다. 그게 좋은 생각인지 아닌지는 상황에 따라 다릅니다. 프로세스간에 동기화하는 한 가지 방법은,하지만 당신은 세마포어를 사용하지 않으려면, 당신은 POSIX 기반 플랫폼에서 PTHREAD_PROCESS_SHARED
속성으로 생성 된 뮤텍스와 조건 변수 등의 과정을 공유 뮤텍스를 사용할 수
감사합니다. 제 질문은 제가이 일을하고 싶은지 아닌지를 결정했습니다. 그리고 그것이 가능하다는 것이 밝혀졌습니다. 다시 한번 감사드립니다. –
(참조 pthread_mutexattr_setpshared()
및 pthread_condattr_setpshared()
). 또 다른 옵션은 정의한 이벤트가 역 다중화 (예 : select()
) 될 때까지 차단하는 이벤트 기반 IPC (소켓 등) 메커니즘을 사용하는 것입니다. 다른 여러 가지 공유 메모리 기반 옵션도 있습니다.
그러나 C++을 사용하고 있으므로 boost.interprocess 또는 ACE과 같은 여러 플랫폼에서 이러한 종류의 프로세스 간 동기화를 크게 단순화하는 C++ 프레임 워크를 사용하는 것이 좋습니다.
fcntl과 flock은 스레드가 아니고 프로세스 용이므로 스레드 동기화에 사용할 수 없습니다.
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
- 1. 백그라운드 작업 프로세스 또는 스레드?
- 2. 멀티 스레드 동기화를위한 올바른 패턴? (C#)
- 3. CLOCK_MONOTONIC 프로세스 (또는 스레드)가 특정입니까?
- 4. 스레드가 여러 개인 스레드 또는 프로세스
- 5. C++ 스레드/프로세스 식별자
- 6. 프로세스 스레드 스케줄링
- 7. 스레드 대 .NET의 프로세스
- 8. 올바른 fcntl 플래그는 무엇입니까?
- 9. 데이터베이스 동기화를위한 웹 서비스 오케스트레이션
- 10. 스레드, 하위 프로세스 및 좀비
- 11. Grails 및 다중 스레드 프로세스
- 12. 파이썬에서 다중 스레드 프로세스 로깅
- 13. 프로세스 대 스레드 (사용자 vs 커널)
- 14. 쿼리 스레드 (프로세스 아님) 프로세서 선호도?
- 15. 모바일 응용 프로그램 또는 클라이언트 측 동기화를위한 서버 측 동기화
- 16. MACOSX (BSD) fcntl() 함수의 F_NOTIFY 플래그와 동일합니다.
- 17. ASP.NET + WCF에서의 장기 실행 스레드 프로세스
- 18. 프로세스 .NET에서 Process.Start를 통해 양산 스레드
- 19. iPod 동기화를위한 좋은 Python 라이브러리
- 20. 오프라인/온라인 데이터 동기화를위한 전략
- 21. Linux : 다중 코어 CPU의 프로세스 및 스레드
- 22. 레일스 우수 사례 : 백그라운드 프로세스/스레드?
- 23. * nix 시스템 전체 스레드 및 프로세스 뮤텍스
- 24. 스레드 컨텍스트 스위치 대 프로세스 컨텍스트 스위치
- 25. 자바 스레드 대 자바 프로세스 성능 저하
- 26. 여러 폼, 여러 스레드, 하나의 프로세스
- 27. 동일한 파일의 다중 스레드 프로세스 데이터
- 28. 프로세스 우선 순위 대 스레드 우선 순위
- 29. 파이썬에서 멀티 스레드 코드의 프로세스 시간 측정하기
- 30. 다중 프로세스 및 다중 스레드 디자인
왜이 작업을 원하십니까? 당신이 성취하고자하는 것에 대한 좀 더 많은 정보가 도움이 될 것입니다. – LnxPrgr3