프로그래밍/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


반응형