-
asio::strand의 올바른 사용법프로그래밍/c++ - boost::asio 2015. 12. 2. 09:44반응형
asio::strand의 올바른 사용법
strand는 동기화 개체로 순차적인 작업을 보장한다.
하지만 post된 작업이 실행되기 이전에 캡쳐된 개체가 제거가 된다면, 메모리 참조 오류가 발생한다.
예를 들자면, 다음과 같은 사용은 문제를 일으킬 수 있는 코드이다.
123strand_.post([this] { // this 캡쳐는 심각한 오류를 일으킬 여지가 있다!cout << this->val_ << endl; // 잘못된 참조!가 될수도 있다});cs 따라서 strand에 post(또는 dispatch)할 때는 shared_ptr을 캡쳐하는 것이 좋다.
123456auto self = shared_from_this();strand_.post([self] { // 이 함수가 실행될 때까지 개체의 유효성이 보장된다.cout << self->val_ << endl;});cs 반응형'프로그래밍 > c++ - boost::asio' 카테고리의 다른 글
asio io_service의 dispatch가 post와 다른 점과 적절한 사용처 (0) 2016.05.01 코루틴(coroutine) 사용 중 주의해야 할 부분? (0) 2015.12.26 boost::asio의 송신 함수. async_write, async_write_some, async_send의 차이 (0) 2015.11.10 boost::asio::streambuf에 custom memory allocator 붙이기 (0) 2015.11.07 boost::asio deadline_timer를 이용한 유니티의 Invoke함수 흉내 내기 (0) 2015.09.28