많은 작업자 스레드가있는 C 응용 프로그램이 있습니다. 이것들은 블록하지 않아야 작업자 스레드가 디스크의 파일에 쓸 필요가 있고, 그것들을 메모리의 원형 버퍼에 쓴 다음 그 버퍼를 디스크에 쓰는 전용 스레드를 가지고 있어야합니다.stdout을 메모리에 버퍼링하고 전용 스레드에서 쓰기하는 방법
작업자 스레드는 더 이상 차단하지 않습니다. 전용 스레드는 작업자 스레드에 영향을 미치지 않고 디스크에 쓰는 동안 안전하게 차단할 수 있습니다 (디스크에 쓰는 동안 잠금을 유지하지는 않습니다). 내 메모리 버퍼는 작가 스레드가 유지할 수있을만큼 충분히 크게 조정됩니다.
모두 훌륭한 작품입니다. 내 질문은, 내가 어떻게 stdout 비슷한 구현합니까?
매크로 printf()를 사용하여 메모리 버퍼에 쓸 수 있지만 stdout에 쓸 수있는 모든 코드 (일부는 타사 라이브러리에 있음)를 제어 할 수 없습니다.
생각하십니까? NickB
파이프에 쓰기가 차단 될 수 있기 때문에 여기의 모든 솔루션이 잘못되었습니다. (그리고 그들을 nonblocking으로 설정하면'FILE'은 flush 할 필요가있을 때 블럭 될 경우 복구 할 수없는 에러 상태가됩니다.) –