가능한 경우 하나의 파일에 내 C++ 프로젝트에서 비동기 및 스레드 안전 로깅을 수행 할 방법을 찾고 있습니다. 나는 현재 cerr
과 clog
을 작업에 사용하고 있지만 동기 적이기 때문에 어떤 것이 기록 될 때마다 실행이 잠시 멈추는 경우가 있습니다. 상대적으로 그래픽이 많은 앱이므로 이런 종류의 작업은 매우 짜증납니다.비동기 스레드로부터 안전한 C++ 로깅
새 로거는 이러한 일시 중지를 제거하기 위해 비동기 I/O를 사용해야합니다. 머지 않아 기본 멀티 스레딩을 추가 할 예정이므로 스레드 안전성 또한 바람직 할 것입니다.
나는 하나의 파일 당 스레드 접근 방식을 고려했지만 로그 관리가 악몽처럼 보일 것으로 보였다. 어떤 제안?
뮤텍스가 없다면 이미 쓰려고하는 스레드가 잠금 해제 될 때까지 회전해야합니다. 어떻게 도움이됩니까? – Electro
나는 확실히 스트림으로 객체의 변환을 지연시키지 않을 것이다. 그것을 다른 스레드에 넣는 것은 그것을 동기화해야한다는 것을 의미합니다. 그리고 그것은 지옥처럼 상처를 줄 것입니다. –
@Electro - 회전하지 않고 차단합니다. 그러나 문자열 처리를 수행하지 않는다면 대기열을로드하는 데 아주 짧은 간격입니다. 문자열 처리는 로깅 스레드에 의해 수행됩니다. @Matthieu, 실시간으로 문자열 처리를하는 것은 큐를로드하는 동안 차단하는 뮤텍스보다 훨씬 많은 것을 아.니다. –