파이프에 임계 구역이 없는 이유는 무엇입니까?

파이프에 임계 구역이 없는 이유는 무엇입니까?

파이프에 임계 구역이 없는 이유는 무엇입니까? 예를 들어, 공유 메모리에서. 파이프에는 연합 프로세스 간에 공통되는 공통 데이터가 있고, 연합 프로세스 간에 공통되는 공유 메모리에는 공통 데이터가 있습니다.

답변1

나는 당신이 무엇을 요구하는지 완전히 확신하지 못합니다. 공유 메모리를 사용하는 경우 작성자와 독자가 충돌하지 않도록 잠금을 사용해야 하는 이유를 묻는 것 같습니다. 하지만 파이프 없이는 파이프를 가질 수 없습니다. 모든 자물쇠. 물론 필요한 잠금 정도는 사용되는 데이터 구조에 따라 다릅니다. 예를 들어 일부 링 버퍼는 대부분 잠금이 없습니다.

그렇다면 대답은 매우 간단합니다. 파이프는 추상화입니다. 파이프 잠금(파이프 데이터 구조에 필요한 범위까지)은 커널에 숨겨져 있습니다.

답변2

PIPE_BUF 크기(일반적으로 메모리 페이지 크기와 동일) 미만의 파이프 쓰기 및 읽기는 원자성이 보장되므로 이를 보호하기 위해 사용자 영역 동기화 메커니즘이 필요하지 않습니다. 커널이 이미 이 작업을 수행합니다. PIPE_BUF보다 큰 쓰기/읽기에는 동기화 메커니즘이 필요합니다. 실제로는 일반적으로 한 번에 많은 데이터가 파이프에 푸시되는 것을 볼 수 없으므로 뮤텍스 등이 많이 사용되는 것을 볼 수 없지만 PIPE_BUF를 초과하는 상황이 발생하면 필요합니다.

관련 정보