Boost.Asio와 많이 놀았습니다. 오늘날의 멀티 코어 시스템에서 성능을 끌어낼 수있는 환상적인 방법을 제공하기 때문에 도서관을 좋아합니다.Boost.Asio를 사용할 때 유효한 개체 수명을 보장하는 가장 좋은 방법은 무엇입니까?
질문 몇 번이나 물어 보았습니다. Asio와 비동기 호출을 할 때 개체 수명/소유권에 관해서는 가치가 있다고 생각했습니다.
반복적으로 문제가 발생한다는 것은 종종 비동기 콜백이 보류중인 개체를 "만료"해야한다는 것입니다. 콜백이 호출되기 전에 해당 객체가 범위를 벗어나면 필연적으로 쾅하는 일이 발생합니다.
대부분의 asio 기반 클래스의 기본 클래스로 boost::enable_shared_from_this
템플릿을 사용했습니다. 이 작업은 정상적으로 처리되지만 약간 부담 스럽습니다. 일반적으로 이것은 생성자를 보호하고 클래스에 factory 메소드를 추가하여 모든 인스턴스가 shared_ptr 내에 생성되도록합니다.
다른 사람들이이 문제를 어떻게 해결했는지 알고 싶었습니다. 이게 최선의 방법일까요? 아니면 내 Asio있어. 완전히 틀렸어?
토론 ... :)
재미있는 시나리오는 다음과 같습니다. 제 동료 (Alan이라고 알려짐)가 당신과 같은 일을하고 있었고 나와 같은 문제 였기 때문에 "해결책"을 언급했습니다. 나는 아직도 그것에 만족하지 않습니다 : 나는 결정론의 부족을 좋아하지 않지만, 그렇다면 그것은 스레딩입니다. – jkp