프로그래밍/c++ - boost::asio
asio::strand의 올바른 사용법
제페
2015. 12. 2. 09:44
반응형
asio::strand의 올바른 사용법
strand는 동기화 개체로 순차적인 작업을 보장한다.
하지만 post된 작업이 실행되기 이전에 캡쳐된 개체가 제거가 된다면, 메모리 참조 오류가 발생한다.
예를 들자면, 다음과 같은 사용은 문제를 일으킬 수 있는 코드이다.
1 2 3 | strand_.post([this] { // this 캡쳐는 심각한 오류를 일으킬 여지가 있다! cout << this->val_ << endl; // 잘못된 참조!가 될수도 있다 }); | cs |
따라서 strand에 post(또는 dispatch)할 때는 shared_ptr을 캡쳐하는 것이 좋다.
1 2 3 4 5 6 | auto self = shared_from_this(); strand_.post([self] { // 이 함수가 실행될 때까지 개체의 유효성이 보장된다. cout << self->val_ << endl; }); | cs |
반응형