Linux(C/C++)에서 프로세스 간 잠금을 수행하는 방법은 무엇입니까?

Linux(C/C++)에서 프로세스 간 잠금을 수행하는 방법은 무엇입니까?

한 번에 하나의 인스턴스에서만 프로세스가 실행되도록 해야 합니다. Windows에서는 명명된 뮤텍스를 사용할 수 있습니다. 하지만 Linux에서는 무엇을 사용해야할지 모르겠습니다.

응용프로그램에서 전용 파일을 생성하는 방법을 본 것 같은데 더 이상 찾을 수 없습니다. 일반 파일 기능, 바쁜 루프를 사용하십니까?

답변1

애플리케이션 인스턴스를 하나만 실행하려면 잠금 파일을 사용할 수 있습니다.열려 있는O_CREAT|O_EXCL파일이 이미 존재하면 실패한다는 플래그가 함께 제공됩니다 .

파일에 대한 액세스를 동기화하려면 다음을 사용하십시오.flock. 다음 명령을 사용하여 일부 파일을 잠글 수도 있습니다.fcntl. Flock은 권고 잠금에만 사용됩니다. 즉, 프로그램은 잠금을 무시하고 어쨌든 액세스할 수 있습니다. 강제 잠금이 가능 fcntl하지만 특별한 설치 옵션과 특별한 파일 권한이 필요합니다.

semget그리고semop프로세스 간 동기화에도 사용할 수 있습니다.

답변2

프로세스 간 뮤텍스는 POSIX의 선택적 부분입니다(참조:unistd.h의 _POSIX_THREAD_PROCESS_SHARED페이지) Linux에서 구현되었으므로 사용할 수도 있습니다.예시 보기.

관련 정보