개별 스레드에서 작업을 실행하는 C++ 멀티 스레드 응용 프로그램이 있습니다. 각 작업에는 출력을 처리하고 저장하는 객체가 있습니다. 각 작업은 서로 다른 비즈니스 논리 개체와 아마도 다른 스레드 또는 스레드 풀을 만듭니다.여러 개의 싱글 톤 : 각 작업마다 하나씩
내가 원하는 것은 "출력"개체를 각 비즈니스 논리 개체에 수동으로 전달하지 않고 각 작업의 출력에 액세스하기 위해 작업별로 실행되는 비즈니스 논리 개체에 대해 쉬운 방법을 제공합니다.
내가 보는 것은 출력 싱글 톤 팩토리를 만들고 TLS에 task_id를 저장하는 것입니다. 그러나 문제는 비즈니스 로직이 새 스레드 또는 스레드 풀을 만들고 해당 스레드가 TLS에 task_id를 갖고 있지 않을 때입니다. 이 방법으로 부모의 스레드 TLS에 대한 액세스 권한이 필요합니다.
다른 방법은 작업 시작 이후 모든 출력을 간단히 가져 오는 것입니다. 그 시간에 다른 작업에서 출력되지만, 적어도, 아무것도보다 더 나은 ...
나는 내 문제를 해결하는 깨끗하고 예쁜 방법의 제안이나 아이디어를 찾고 있습니다. 감사.
upd : 그래, 그건 singletone 아니에요. 다음과 같이이 객체에 액세스 할 수 있기를 바랍니다.
output << "message";
그리고 그게 전부입니다. 비즈니스 로직 클래스간에 출력 객체에 대한 포인터를 전달할 필요가 없습니다. 작업마다 전역 출력 개체가 있어야합니다.
멀티 스레딩 + 싱글 톤 = 죽음 + 파괴 (보통) –