Boost C++ Libraries/Boost.Asio

Boost.Asio - io_context::strand

까마귀75 2021. 3. 17. 16:56
728x90
반응형

io_context::strand

직렬화된 핸들러 실행을 제공한다.

class strand

멤버 함수

이 름 설 명
context 기저 실행 컨텍스트를 얻어온다.
defer 주어진 함수 개체를 호출하도록 스트랜드(strand)에 요청한다.
dispatch 주어진 함수 개체를 호출하도록 스트랜드(strand)에 요청한다.

(더 이상 사용되지 않음: boost::asio::dispatch() 사용.) 주어진 핸들러를 호출하도록 스트랜드(strand)에 요청한다.
on_work_finished 일부 작업이 더이상 처리되지 않은 상태가 아님을 스트랜드(strand)에 알린다.
on_work_started 수행할 일부 처리되지 않은 작업이 있다는 것을 스트랜드(strand)에 알린다.
post 주어진 함수 개체를 호출하도록 스트랜드(strand)에 요청한다.

(더 이상 사용되지 않음: boost::asio::post() 사용.) 주어진 핸들러를 호출하고 즉시 반환하도록 스트랜드(strand)에 요청한다.
running_in_this_thread 스트랜드(strand)가 현재 스레드에서 실행 중인지 확인한다.
strand
[constructor]
생성자.
wrap (더 이상 사용되지 않음: boost::asio::bind_executor() 사용.) 스트랜드(strand)에서 래핑된 핸들러를 자동으로 디스패치하는 새로운 핸들러를 생성한다.
~strand
[destructor]
소멸자.

Friends

이 름 설 명
operator!= 두 스트랜드(strand)가 다른지 비교한다.
operator== 두 스트랜드(strand)가 같은지 비교한다.

io_context::strand 클래스는 해당 핸들러가 동시에 실행되지 않도록 보장하면서 핸들러를 배치하고 발송하는 기능을 제공한다.

핸들러 호출 순서

주어진 개체:

  • 스트랜드 개체 s
  • 완료 핸들러 요구 사항을 충족하는 개체 a
  • 구현에 의해 만들어진 임의 복사본 개체 a1
  • 완료 핸들러 요구 사항을 충족하는 개체 b
  • 구현에 의해 만들어진 임의 복사본 개체 b1

다음 조건 중 하나가 true 이면:

  • s.post(a)s.post(b) 전에 발생한다.
  • s.post(a)s.dispatch(b) 전에 발생하고, 후자는 스트랜드(strand) 외부에서 수행된다.
  • s.dispatch(a)s.post(b) 전에 발생하고, 전자는 스트랜드(strand) 외부에서 수행된다.
  • s.dispatch(a)s.dispatch(b) 전에 발생하고, 두 가지 모두 스트랜드(strand) 외부에서 수행된다.

그런면 asio_handler_invoke(a1, &a1)asio_handler_invoke(b1, &b1) 전에 발생한다.

다음과 같은 경우 주의해야 한다:

async_op_1(..., s.wrap(a));
async_op_2(..., s.wrap(b));

첫 번째 비동기식 작업을 완료하면 s.dispatch(a)를 수행하고, 두 번째는 s.dispatch(b)를 수행하지만, 작업이 수행되는 순서는 지정되지 않는다. 즉 하나가 다른 것보다 먼저 수행되는지 여부를 알 수 없다. 따라서 위의 조건 중 어느 것도 충족되지 않으며 순서에 대한 보증도 이루어지지 않는다.

주 의

구현에서는 다른 스트랜드(strand) 개체를 통해 배치되거나 발송된 핸들러가 동시에 호출된다는 보장은 없다.

스레드 안전성

고유 개체: 안전함.
공유 개체: 안전함.

요구 사항

일반 헤더: boost/asio/io_context_strand.hpp
편의 헤더: boost/asio.hpp

Boost.Asio 홈

728x90
반응형