2011-05-01 4 views
2

두 개의 개별 스레드가 std :: clog에 디버그 출력을 보내고 출력이 산재되어있는 다중 스레드 프로그램이 있습니다. 출력에서 라인 피드를 제외하고 출력을 적어도 별도로 유지하도록하는 쉬운 방법을 찾고 싶습니다. 이렇게하면 디버그 출력을보다 쉽게 ​​해석 할 수 있습니다. 어떤 곳에서는 출력 전에 sleep (1)을 삽입하고 충돌을 줄이기 위해 출력을 문자열로 보내기 전에 출력을 수집했지만보다 강력하고 확실한 해고 된 솔루션을 선호합니다.다른 스레드에서 꼴록 충돌을 피하는 쉬운 방법은 무엇입니까?

각 스레드가 한 번에 전체 줄을 std :: clog에 쓰도록하기위한 쉬운 방법이 있습니까? 다른 스레드가 들어 와서 출력 줄을 쓸 수 있습니까?

답변

3

이 일을 아무 특히 쉬운 방법은 없습니다, 그리고 여기에 대한 확장 된 논의가있다 : 문제는 다소 다른 것을하기 전에, 원자 전체 라인을 기록하는 새로운 AtomicStream의 창조가 해결 http://www.cplusplus.com/forum/general/27760/

은 스트리밍됩니다 (이는 버퍼링 트릭으로 수행됩니다). 비슷한 솔루션을 제시해야합니다. 쉽지 않은 대답은 유감스럽게 생각합니다. 스레드 동기화가 어떻게 든 여러분의 솔루션에 반영되어야합니다.

이것은 파생물 일 수 있지만 std::clog이 파일로 리디렉션되는 경우 여러 스레드에 대해 여러 개의 파일을 가질 수도 있습니다.

0

그래, 당신은 크로스 스레드 동기화 방법에 대한 lookign이야. 이러한 API는 대개 운영체제의 API에서 사용할 수 있으며 Boost에서도 찾을 수 있습니다.

1

너는 할 수 없다. 같은 시간에 동시에 글을 쓰고 있습니다. clog의 버퍼링은 약간 도움이되지만 여전히 보장은 없습니다.

스레드 로깅을 동기화하고 싶지 않다면 (예를 들어 다소 비쌉니다) 대신 로깅 기능을 사용해야합니다 (이 기능을 사용하면 서로 다른 파일에 대해 서로 다른 파일을 말할 수 있습니다).

관련 문제