문제

10 개의 프로세스가 실행 중이며 각 프로세스는 각각 같은 파일로 작성됩니다. 나는 여러 작가를 원하지 않으므로 기본적으로 파일 쓰기를 보호하기 위해 Mutex/Binary Semaphore를 찾고 있습니다. 문제는 10 개의 프로세스 중에서 세마포어를 공유 할 수 없으므로 10 개의 프로세스간에 공유 메모리를 사용하고 세마포어를 공유 메모리 내부에 넣어 각 프로세스에서 액세스 할 수 있도록하고 있습니다.

누구든지 UNIX의 C/C ++로 문서를 알려줄 수 있습니까? 이 구조를 사용하는 샘플 코드가 좋을 것입니다.

감사

도움이 되었습니까?

해결책

사용하는 것이 더 좋을 것 같습니다 flock(2):

flock(fd, LOCK_EX);
n = write(fd, buf, count);
flock(fd, LOCK_UN);

다른 팁

공유 메모리에 세마포어를 넣는 것이이 문제에 대한 최선의 해결책은 아닙니다 (전혀 작동하지 않는 경우). 파일 잠금을 조사해야합니다. 파일 잠금을 조사해야합니다. 파일 잠금 장치는 파일 작성자간에 독점 성을 제공하도록 특별히 설계된 UNIX 기능입니다.

구체적으로 확인하십시오.

자세한 설명 자료는 참조하십시오 UNIX 환경의 고급 프로그래밍, 섹션 14.3

보세요 유닉스 네트워크 프로그래밍 vol. 2 W. Richard Stevens.

이 주제에 관한 최고의 책입니다.

pthread mutxes를 사용할 수 있습니다. 뮤텍스를 시작하는 동안 사용해야합니다 pthread_mutexattr_setpshared 함수는 프로세스에서 MUTEX를 공유하고 공유 메모리 안에 넣을 수 있도록합니다. 모든 프로세스는 공유 메모리에 부착 한 다음 MUTEX에 액세스 할 수 있습니다.

또한 잠금 요구 사항 (재귀 등)에 따라 SHM에 추가 속성을 추가 할 수 있습니다.

UNIX IPC를 사용하여 공유 대기열을 만드는 것은 어떻습니까? 한 프로세스는 큐를 읽고 파일에 씁니다. 다른 모든 프로세스는 데이터를 큐에 푸시합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top