-
카테고리
-
세부 분야
시스템
-
해결 여부
미해결
질문이 있습니다!
21.03.01 11:20 작성 조회수 125
0
parent 가 언제나 child보다 먼저 실행된다는 보장이 없다고 전 강의에서 설명해주셨고, 이번 강의에서도 concurrency 하게 작동한다고 얘기해주셨는데요 fork 한 이후에 child process가 먼저 파이프에서 READ 하려 먼저 시도하면 원하는 결과인 parent process가 파이프에 WRITE 한 뒤에 child process 가 READ하는 과정은 보장할 수 없지 않나요?
read() 함수가 buffer에 아무것도 없다면 blocking 되는 API인가요?
답변을 작성해보세요.
0
0
SIsB
질문자2021.03.01
답변이 이렇게 빨리 해주시다니! 감사합니당
후자로 얘기해주셨던 부분은 non-blocking io 인 경우에는 wait() 시스템 콜로 부모의 프로세스가 끝날 때까지 기다린 이후에 인터럽트를 받아서 non-blocking io를 실행하면 된다는 얘기이신거죠?
0
주니온
지식공유자2021.03.01
좋은 의문이네요.
말씀하신 상황에서 child가 read() 했을 때, buffer에 아무 것도 없다면 어떤 일이 벌어지나요?
blocking io일 경우에 buffer에 뭔가 쓰여질 때까지 계속 읽으려고 하고 있겠죠?
그 후에 parent가 write()를 하고 나면 child가 그것을 읽을 수 있으니까
파이프의 정상 동작에는 문제가 없습니다.
non-blocking io일 경우에도 wait하고 있다가 parent의 signal을 받아서 깨어나니까
파이프의 정상 동작에는 문제가 없겠지요.
답변 3