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
반응형
'Boost C++ Libraries > Boost.Asio' 카테고리의 다른 글
Boost.Asio - buffers_iterator (0) | 2021.03.19 |
---|---|
Boost.Asio 색인 - ip::basic_endpoint::operator<< (0) | 2021.03.18 |
Boost.Asio - strand (0) | 2021.03.17 |
Boost.Asio - associated_executor (0) | 2021.03.17 |
Boost.Asio - io_context (0) | 2021.03.16 |