single_assignment 클래스single_assignment Class

single_assignment 메시징 블록은 하나의 한 번 쓰기 message를 저장할 수 있는, 순서가 지정된 다중 대상 다중 소스 propagator_block입니다.A single_assignment messaging block is a multi-target, multi-source, ordered propagator_block capable of storing a single, write-once message.

구문Syntax

template<class T>
class single_assignment : public propagator_block<multi_link_registry<ITarget<T>>, multi_link_registry<ISource<T>>>;

매개 변수Parameters

TT
버퍼에 의해 저장 및 전파 되는 메시지의 페이로드 유형입니다.The payload type of the message stored and propagated by the buffer.

멤버Members

Public 생성자Public Constructors

NameName 설명Description
single_assignmentsingle_assignment 오버로드되었습니다.Overloaded. single_assignment 메시징 블록을 생성합니다.Constructs a single_assignment messaging block.
~ single_assignment 소멸자~single_assignment Destructor 메시징 블록을 소멸 시킵니다 single_assignment .Destroys the single_assignment messaging block.

Public 메서드Public Methods

이름Name 설명Description
has_valuehas_value single_assignment 메시징 블록이 아직 값을 사용 하 여 초기화 되었는지 여부를 확인 합니다.Checks whether this single_assignment messaging block has been initialized with a value yet.
valuevalue 메시징 블록에 저장 되는 메시지의 현재 페이로드에 대 한 참조를 가져옵니다 single_assignment .Gets a reference to the current payload of the message being stored in the single_assignment messaging block.

Protected 메서드Protected Methods

NameName 설명Description
accept_messageaccept_message single_assignment메시지의 복사본을 호출자에 게 반환 하는이 메시징 블록에서 제공 된 메시지를 수락 합니다.Accepts a message that was offered by this single_assignment messaging block, returning a copy of the message to the caller.
consume_messageconsume_message 에서 이전에 제공 하 고 대상에서 예약한 메시지를 사용 하 여 single_assignment 메시지의 복사본을 호출자에 게 반환 합니다.Consumes a message previously offered by the single_assignment and reserved by the target, returning a copy of the message to the caller.
link_target_notificationlink_target_notification 새 대상이이 메시징 블록에 연결 되었음을 알리는 콜백입니다 single_assignment .A callback that notifies that a new target has been linked to this single_assignment messaging block.
propagate_messagepropagate_message ISource블록에서이 메시징 블록으로 메시지를 비동기적으로 전달 single_assignment 합니다.Asynchronously passes a message from an ISource block to this single_assignment messaging block. propagate소스 블록에서 호출 하는 경우 메서드에 의해 호출 됩니다.It is invoked by the propagate method, when called by a source block.
propagate_to_any_targetspropagate_to_any_targets message _PMessagesingle_assignment 메시징 블록에 배치 하 고 연결 된 모든 대상에 제공 합니다.Places the message _PMessage in this single_assignment messaging block and offers it to all of the linked targets.
release_messagerelease_message 이전 메시지 예약을 해제 합니다.Releases a previous message reservation. Source_block:: release_message를 재정의 합니다.(Overrides source_block::release_message.)
reserve_messagereserve_message 이 메시징 블록에 의해 이전에 제공 된 메시지를 예약 single_assignment 합니다.Reserves a message previously offered by this single_assignment messaging block. Source_block:: reserve_message를 재정의 합니다.(Overrides source_block::reserve_message.)
resume_propagationresume_propagation 예약이 해제 된 후 전파를 다시 시작 합니다.Resumes propagation after a reservation has been released. Source_block:: resume_propagation를 재정의 합니다.(Overrides source_block::resume_propagation.)
send_messagesend_message ISource블록에서이 메시징 블록으로 메시지를 동기적으로 전달 single_assignment 합니다.Synchronously passes a message from an ISource block to this single_assignment messaging block. send소스 블록에서 호출 하는 경우 메서드에 의해 호출 됩니다.It is invoked by the send method, when called by a source block.

설명Remarks

single_assignment메시징 블록은 메시지의 복사본을 각 대상으로 전파 합니다.A single_assignment messaging block propagates out copies of its message to each target.

자세한 내용은 비동기 메시지 블록을 참조 하세요.For more information, see Asynchronous Message Blocks.

상속 계층 구조Inheritance Hierarchy

ISourceISource

ITargetITarget

source_blocksource_block

propagator_blockpropagator_block

single_assignment

요구 사항Requirements

헤더: agents.hHeader: agents.h

네임 스페이스: 동시성Namespace: concurrency

accept_messageaccept_message

single_assignment메시지의 복사본을 호출자에 게 반환 하는이 메시징 블록에서 제공 된 메시지를 수락 합니다.Accepts a message that was offered by this single_assignment messaging block, returning a copy of the message to the caller.

virtual message<T>* accept_message(runtime_object_identity _MsgId);

매개 변수Parameters

_MsgId_MsgId
runtime_object_identity제공 된 개체의입니다 message .The runtime_object_identity of the offered message object.

Return ValueReturn Value

message호출자가 소유 하 고 있는 개체에 대 한 포인터입니다.A pointer to the message object that the caller now has ownership of.

설명Remarks

single_assignment메시징 블록은 현재 저장 된 메시지의 소유권을 전송 하는 대신 대상에 메시지의 복사본을 반환 합니다.The single_assignment messaging block returns copies of the message to its targets, rather than transferring ownership of the currently held message.

consume_messageconsume_message

에서 이전에 제공 하 고 대상에서 예약한 메시지를 사용 하 여 single_assignment 메시지의 복사본을 호출자에 게 반환 합니다.Consumes a message previously offered by the single_assignment and reserved by the target, returning a copy of the message to the caller.

virtual message<T>* consume_message(runtime_object_identity _MsgId);

매개 변수Parameters

_MsgId_MsgId
runtime_object_identity message 사용 되는 개체의입니다.The runtime_object_identity of the message object being consumed.

Return ValueReturn Value

message호출자가 소유 하 고 있는 개체에 대 한 포인터입니다.A pointer to the message object that the caller now has ownership of.

설명Remarks

와 비슷하지만 accept 항상를 호출 reserve 합니다.Similar to accept, but is always preceded by a call to reserve.

has_valuehas_value

single_assignment 메시징 블록이 아직 값을 사용 하 여 초기화 되었는지 여부를 확인 합니다.Checks whether this single_assignment messaging block has been initialized with a value yet.

bool has_value() const;

Return ValueReturn Value

true 블록에서 값을 받았으면이 고, false 그렇지 않으면입니다.true if the block has received a value, false otherwise.

새 대상이이 메시징 블록에 연결 되었음을 알리는 콜백입니다 single_assignment .A callback that notifies that a new target has been linked to this single_assignment messaging block.

virtual void link_target_notification(_Inout_ ITarget<T>* _PTarget);

매개 변수Parameters

_PTarget_PTarget
새로 연결 된 대상에 대 한 포인터입니다.A pointer to the newly linked target.

propagate_messagepropagate_message

ISource블록에서이 메시징 블록으로 메시지를 비동기적으로 전달 single_assignment 합니다.Asynchronously passes a message from an ISource block to this single_assignment messaging block. propagate소스 블록에서 호출 하는 경우 메서드에 의해 호출 됩니다.It is invoked by the propagate method, when called by a source block.

virtual message_status propagate_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _PSource);

매개 변수Parameters

_PMessage_PMessage
message 개체에 대한 포인터입니다.A pointer to the message object.

_PSource_PSource
메시지를 제공 하는 소스 블록에 대 한 포인터입니다.A pointer to the source block offering the message.

Return ValueReturn Value

대상에서 메시지를 사용 하 여 수행 하기로 결정 한 내용을 나타내는 message_status 입니다.A message_status indication of what the target decided to do with the message.

propagate_to_any_targetspropagate_to_any_targets

message _PMessagesingle_assignment 메시징 블록에 배치 하 고 연결 된 모든 대상에 제공 합니다.Places the message _PMessage in this single_assignment messaging block and offers it to all of the linked targets.

virtual void propagate_to_any_targets(_Inout_opt_ message<T>* _PMessage);

매개 변수Parameters

_PMessage_PMessage
messagesingle_assignment 메시징 블록에서 소유권을 가져온에 대 한 포인터입니다.A pointer to a message that this single_assignment messaging block has taken ownership of.

release_messagerelease_message

이전 메시지 예약을 해제 합니다.Releases a previous message reservation.

virtual void release_message(runtime_object_identity _MsgId);

매개 변수Parameters

_MsgId_MsgId
runtime_object_identity message 해제 되는 개체의입니다.The runtime_object_identity of the message object being released.

reserve_messagereserve_message

이 메시징 블록에 의해 이전에 제공 된 메시지를 예약 single_assignment 합니다.Reserves a message previously offered by this single_assignment messaging block.

virtual bool reserve_message(runtime_object_identity _MsgId);

매개 변수Parameters

_MsgId_MsgId
runtime_object_identity message 예약 되는 개체의입니다.The runtime_object_identity of the message object being reserved.

Return ValueReturn Value

true 메시지가 성공적으로 예약 되었으면이 고, false 그렇지 않으면입니다.true if the message was successfully reserved, false otherwise.

설명Remarks

가 호출 된 후를 reserve 반환 하면 true 또는을 consume release 호출 하 여 메시지의 소유권을 가져오거나 해제 해야 합니다.After reserve is called, if it returns true, either consume or release must be called to either take or release ownership of the message.

resume_propagationresume_propagation

예약이 해제 된 후 전파를 다시 시작 합니다.Resumes propagation after a reservation has been released.

virtual void resume_propagation();

send_messagesend_message

ISource블록에서이 메시징 블록으로 메시지를 동기적으로 전달 single_assignment 합니다.Synchronously passes a message from an ISource block to this single_assignment messaging block. send소스 블록에서 호출 하는 경우 메서드에 의해 호출 됩니다.It is invoked by the send method, when called by a source block.

virtual message_status send_message(
    _Inout_ message<T>* _PMessage,
    _Inout_ ISource<T>* _PSource);

매개 변수Parameters

_PMessage_PMessage
message 개체에 대한 포인터입니다.A pointer to the message object.

_PSource_PSource
메시지를 제공 하는 소스 블록에 대 한 포인터입니다.A pointer to the source block offering the message.

Return ValueReturn Value

대상에서 메시지를 사용 하 여 수행 하기로 결정 한 내용을 나타내는 message_status 입니다.A message_status indication of what the target decided to do with the message.

single_assignmentsingle_assignment

single_assignment 메시징 블록을 생성합니다.Constructs a single_assignment messaging block.

single_assignment();

single_assignment(
    filter_method const& _Filter);

single_assignment(
    Scheduler& _PScheduler);

single_assignment(
    Scheduler& _PScheduler,
    filter_method const& _Filter);

single_assignment(
    ScheduleGroup& _PScheduleGroup);

single_assignment(
    ScheduleGroup& _PScheduleGroup,
    filter_method const& _Filter);

매개 변수Parameters

_Filter_Filter
제공 된 메시지를 수락 해야 하는지 여부를 결정 하는 필터 함수입니다.A filter function which determines whether offered messages should be accepted.

_PScheduler_PScheduler
Scheduler 메시징 블록의 전파 작업이 예약되는 single_assignment 개체입니다.The Scheduler object within which the propagation task for the single_assignment messaging block is scheduled.

_PScheduleGroup_PScheduleGroup
ScheduleGroup 메시징 블록의 전파 작업이 예약되는 single_assignment 개체입니다.The ScheduleGroup object within which the propagation task for the single_assignment messaging block is scheduled. 사용된 Scheduler 개체는 일정 그룹에서 암시됩니다.The Scheduler object used is implied by the schedule group.

설명Remarks

런타임은 _PScheduler 또는 _PScheduleGroup 매개 변수를 지정하지 않는 경우 기본 스케줄러를 사용합니다.The runtime uses the default scheduler if you do not specify the _PScheduler or _PScheduleGroup parameters.

형식은 filter_method bool (T const &) 제공 된 메시지를 single_assignment 수락 해야 하는지 여부를 확인 하기 위해이 메시징 블록에 의해 호출 되는 시그니처가 포함 된 함수입니다.The type filter_method is a functor with signature bool (T const &) which is invoked by this single_assignment messaging block to determine whether or not it should accept an offered message.

~ single_assignment~single_assignment

메시징 블록을 소멸 시킵니다 single_assignment .Destroys the single_assignment messaging block.

~single_assignment();

value

메시징 블록에 저장 되는 메시지의 현재 페이로드에 대 한 참조를 가져옵니다 single_assignment .Gets a reference to the current payload of the message being stored in the single_assignment messaging block.

T const& value();

Return ValueReturn Value

저장 된 메시지의 페이로드입니다.The payload of the stored message.

설명Remarks

이 메서드는 현재 메시징 블록에 저장 된 메시지가 없는 경우 메시지가 도착할 때까지 기다립니다 single_assignment .This method will wait until a message arrives if no message is currently stored in the single_assignment messaging block.

참고 항목See also

concurrency 네임 스페이스concurrency Namespace
overwrite_buffer 클래스overwrite_buffer Class
unbounded_buffer 클래스unbounded_buffer Class