해결된 질문
작성
·
515
1
안녕하세요.
프로세스 동기화에서 뮤텍스, 세마포 부분 공부 중 궁금한 게 생겨 질문 올리게 되었습니다.
두 프로세스가 임계 구역 코드를 실행하려고 하는데 이를 동기화 하기 위해 뮤텍스 도구를 사용한다고 하였을 시, 뮤텍스는 전역 변수를 하나 두고 해당 전역 변수의 값이 false면 실행하고 true면 반복문으로 계속 해당 전역 변수의 값을 확인하다가 false로 바뀌면 실행하는 것인데
만약에 두 프로세스가 동시에 전역 변수를 가져와서 CPU 레지스터에 세팅한다고 하면 의미가 없는 거 아닌가요?
확률적으로는 매우 희박하겠지만 이런 확률은 고려하지 않는 것인지 궁금하네요.
동일 프로세스 내에서 스레드 간에 발생하는 거라면 Java의 Synchronized 키워드를 붙인다고 하면 이해가 가겠는데 다른 프로세스 간에 발생하는 거라면 기본적으로는 자원을 공유하지 않으니까 공유 메모리에 있는 변수를 이용할 것 같은데
이런 경우에도 Java의 Synchronized 키워드 같은 게 있는 걸까요?
답변 1
0
서로 다른 프로세스는 RAM에서 영역이 나누어져 있기 때문에 일반적인 변수로 자원을 공유할 수 없습니다.
프로세스 간 통신을 위해선 파일이나 운영체제에서 제공하는 '파이프'를 이용합니다.
파일로 통신을 하는 경우 동기화 방법은 존재하지 않습니다..
따라서 프로세스 간 동기화는 파이프를 이용합니다.
추가로 말씀드리자면 프로세스 간 동기화에선 뮤텍스와 세마포어를 적용할 수 없습니다!
궁금증이 해결되셨나요? 😄
프로세스 간 공유 메모리에 변수를 선언해서 동기화하는 사례는 없는 부분인가요?