잠금, 뮤텍스, 세마포어는 여러(스레드 또는 프로세스?) 액세스를 동시에 무언가에 동기화하는 데 사용된다고 생각합니다.
이 "사물"은 여러(스레드 또는 프로세스) 간에 공유 메모리여야 합니까?
그렇다면 잠금, 뮤텍스, 세마포어는 프로세스의 여러 스레드에만 사용되며 동일한 프로세스의 여러 스레드는 메모리를 공유하는 반면 여러 프로세스는 메모리를 공유하지 않기 때문에 여러 프로세스에는 사용되지 않는다는 의미입니까?
감사해요.
답변1
스레드 간에 또는 프로세스 간에 잠금, 뮤텍스 및 세마포어가 사용됩니까?
두 경우 모두에 대한 잠금 기본 요소의 예를 찾을 수 있습니다. 예를 들어, pthread 뮤텍스는 동일한 프로세스의 스레드 간 상호 배제에 사용됩니다. 반면, 시스템 V IPC(man svipc
) 세마포어는 프로세스 전반에 걸쳐 사용될 수 있습니다. 파일 시스템 수준 잠금(파일 또는 파일의 일부)을 사용하여 여러 프로세스 간을 조정할 수도 있습니다.
이 "사물"은 여러(스레드 또는 프로세스) 간에 공유 메모리여야 합니까?
반드시 공유 메모리는 아닙니다. 모든 유형의 리소스는 동기화 프리미티브를 통해 보호될 수 있습니다. 프로세스 및/또는 스레드 간에 공유되는 공유 메모리 블록이 아마도 가장 일반적인 예일 것입니다. 그러나 파일 핸들(전체 파일이나 파일의 일부를 잠그는 것, 또는 고유한 리소스에 대한 다른 종류의 "핸들"을 잠그는 것)과 같은 다른 것들도 있습니다. ) 또한 하드웨어 장치에 액세스할 수 있습니다.
그렇다면 잠금, 뮤텍스, 세마포어는 프로세스의 여러 스레드에만 사용되며 동일한 프로세스의 여러 스레드는 메모리를 공유하는 반면 여러 프로세스는 메모리를 공유하지 않기 때문에 여러 프로세스에는 사용되지 않는다는 의미입니까?
음 ... 아니. 프로세스는 메모리를 공유할 수 있습니다. (실제로 대부분은 읽기 전용 방식으로만 이 작업을 수행합니다. 공유 라이브러리 코드가 포함된 페이지는 프로세스 간에 공유됩니다. 그러나 보호가 필요하지 않습니다. 포크할 때 수행되는 쓰기 시 복사 공유 맵에는 다음이 필요합니다. protection 이지만 커널은 이를 투명하게 처리합니다. 여기에는 공유 메모리 맵에 대한 잠금이 포함됩니다. 이는 메모리 영역/데이터 구조를 보호하는 일반 잠금과 개념적으로 약간 다릅니다.
프로세스나 스레드가 공유할 수 있는 것(적어도 하나 이상이 쓸 수 있는 경우)에는 보호/조정이 필요하며, 파일과 장치가 가장 일반적인 두 가지라고 생각합니다.