게임 서버를 실행하는 시스템을 구현하고 있습니다. 두 개의 파이프 쌍을 만들고 아이를 분기하는 프로세스 ("게임 컨트롤러")가 있습니다. 자식은 STDIN을 하나의 파이프로 채우고 STDOUT과 STDERR을 다른 파이프로 옮겨 놓은 다음 execlp()
을 실행하여 게임 코드를 실행합니다.한 파이프에서 멀티 스레드 읽기
게임 컨트롤러에는 두 개의 스레드가 있습니다. 첫 번째는 다른 응용 프로그램의 입력을 수신하는 명명 된 UNIX 소켓의 accept()
에서 차단되고 두 번째 스레드는 게임 서버의 출력 및 오류 파이프를 차단합니다 (read()
).
때때로 첫 번째 스레드는 문자열을 게임 서버의 stdin 파이프로 보내는 명령을 수신합니다. 이 시점에서, 어떻게 든 첫 번째 스레드가 응답 및 오류 파이프에서 읽을 수 있도록 read()
ing에서 두 번째 스레드를 중지해야합니다.
(내가/라인 응답이 오랫동안 얼마나 많은 문자를 알 것이다, 그래서이 과정을 재설정, 두 번째 스레드 재개 읽기 읽기를 중단 할 때 알고 할 것이라는 점을 주목할 필요가있다.)
어떻게 위와 같이 일시적으로 읽기 제어를 다른 스레드로 전환합니까?