Compartilhar via


Classe single_assignment

Um bloco de mensagens single_assignment é um bloco ordenado, de múltiplos destinos e múltiplas fontes, capaz de armazenar um message único, com capacidade de gravação única.

Sintaxe

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

Parâmetros

T
O tipo de payload da mensagem armazenada e propagada pelo buffer.

Membros

Construtores públicos

Nome Descrição
single_assignment Sobrecarregado. Constrói um bloco de mensagens single_assignment.
Destruidor ~single_assignment Destrói o bloco de mensagens single_assignment.

Métodos públicos

Nome Descrição
has_value Verifica se este bloco de mensagens single_assignment já foi inicializado com um valor.
value Obtém uma referência ao conteúdo atual da mensagem que está sendo armazenada no bloco de mensagens single_assignment.

Métodos protegidos

Nome Descrição
accept_message Aceita uma mensagem oferecida por esse bloco de mensagens single_assignment, retornando uma cópia da mensagem para o chamador.
consume_message Consome uma mensagem oferecida anteriormente por single_assignment e reservada pelo destino, retornando uma cópia da mensagem ao chamador.
notificação_de_destino_de_link Um callback que notifica que um novo destino foi vinculado a este bloco de mensagens single_assignment.
propagate_message Passa uma mensagem de modo assíncrono de um bloco ISource para este bloco de mensagens single_assignment. Ele é invocado pelo método propagate, quando chamado por um bloco de origem.
propagate_to_any_targets Coloca o message _PMessage neste bloco de mensagens single_assignment e oferece-o a todos os destinos vinculados.
mensagem_de_lançamento Libera uma reserva de mensagem anterior. (Substitui source_block::release_message.)
reserve_message Reserva uma mensagem oferecida anteriormente por este bloco de mensagens single_assignment. (Substitui source_block::reserve_message.)
resume_propagation Retoma a propagação depois que uma reserva é liberada. (Sobrescreve source_block::resume_propagation.)
send_message De maneira síncrona, passa uma mensagem de um bloco ISource para este bloco de mensagens single_assignment. Ele é invocado pelo método send, quando chamado por um bloco de origem.

Comentários

Um bloco de mensagens single_assignment propaga cópias de sua mensagem para cada destino.

Para mais informações, confira Blocos de mensagens assíncronas.

Hierarquia de herança

ISource

ITarget

source_block

propagator_block

single_assignment

Requisitos

Cabeçalho: agents.h

Namespace: simultaneidade

aceitar_mensagem

Aceita uma mensagem oferecida por esse bloco de mensagens single_assignment, retornando uma cópia da mensagem para o chamador.

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

Parâmetros

_MsgId
O runtime_object_identity do objeto message oferecido.

Valor de retorno

Um ponteiro para o objeto message do qual o chamador agora tem propriedade.

Comentários

O bloco de mensagens single_assignment retorna cópias da mensagem para seus destinos, em vez de transferir a propriedade da mensagem atualmente mantida.

consumir_mensagem

Consome uma mensagem oferecida anteriormente por single_assignment e reservada pelo destino, retornando uma cópia da mensagem ao chamador.

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

Parâmetros

_MsgId
O runtime_object_identity do objeto message que está sendo consumido.

Valor de retorno

Um ponteiro para o objeto message do qual o chamador agora tem propriedade.

Comentários

Semelhante a accept, mas é sempre precedido por uma chamada para reserve.

tem_valor

Verifica se este bloco de mensagens single_assignment já foi inicializado com um valor.

bool has_value() const;

Valor de retorno

true se o bloco tiver recebido um valor; caso contrário, false.

Um callback que notifica que um novo destino foi vinculado a este bloco de mensagens single_assignment.

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

Parâmetros

_PTarget
Um ponteiro para o destino recém-vinculado.

propagate_message

Passa uma mensagem de modo assíncrono de um bloco ISource para este bloco de mensagens single_assignment. Ele é invocado pelo método propagate, quando chamado por um bloco de origem.

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

Parâmetros

_PMessage
Um ponteiro para o message objeto.

_PSource
Um ponteiro para o bloco de origem que fornece a mensagem.

Valor de retorno

Uma indicação de message_status sobre o que o destino decidiu fazer com a mensagem.

propagate_to_any_targets

Coloca o message_PMessagesingle_assignment neste bloco de mensagens e o oferece a todos os destinos vinculados.

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

Parâmetros

_PMessage
Um ponteiro para um message cuja propriedade foi assumida por este bloco de mensagens single_assignment.

mensagem_de_lançamento

Libera uma reserva de mensagem anterior.

virtual void release_message(runtime_object_identity _MsgId);

Parâmetros

_MsgId
O runtime_object_identity do objeto message que está para ser liberado.

mensagem_reserva

Reserva uma mensagem oferecida anteriormente por este bloco de mensagens single_assignment.

virtual bool reserve_message(runtime_object_identity _MsgId);

Parâmetros

_MsgId
O runtime_object_identity do objeto message que está sendo reservado.

Valor de retorno

true se a mensagem foi reservada com sucesso; caso contrário, false.

Comentários

Depois de reserve ser chamado, se ele retornar true, consume ou release deverá ser chamado para assumir ou liberar a propriedade da mensagem.

resume_propagation

Retoma a propagação depois que uma reserva é liberada.

virtual void resume_propagation();

enviar_mensagem

De maneira síncrona, passa uma mensagem de um bloco ISource para este bloco de mensagens single_assignment. Ele é invocado pelo método send, quando chamado por um bloco de origem.

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

Parâmetros

_PMessage
Um ponteiro para o message objeto.

_PSource
Um ponteiro para o bloco de origem que fornece a mensagem.

Valor de retorno

Uma indicação de message_status sobre o que o destino decidiu fazer com a mensagem.

single_assignment

Constrói um bloco de mensagens single_assignment.

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);

Parâmetros

_Filter
Uma função de filtro que determina se as mensagens oferecidas devem ser aceitas.

_PScheduler
O objeto Scheduler no qual a tarefa de propagação do bloco de mensagens single_assignment está agendada.

_PScheduleGroup
O objeto ScheduleGroup no qual a tarefa de propagação do bloco de mensagens single_assignment está agendada. O objeto Scheduler usado é implicado pelo grupo de agendamento.

Comentários

O runtime usará o agendador padrão se você não especificar os parâmetros _PScheduler ou _PScheduleGroup.

O tipo filter_method é um functor com assinatura bool (T const &) invocado por esse bloco de mensagens single_assignment para determinar se ele deve ou não aceitar uma mensagem oferecida.

~ single_assignment

Destrói o bloco de mensagens single_assignment.

~single_assignment();

valor

Obtém uma referência ao conteúdo atual da mensagem que está sendo armazenada no bloco de mensagens single_assignment.

T const& value();

Valor de retorno

A carga útil da mensagem armazenada.

Comentários

Esse método aguardará até que uma mensagem chegue se nenhuma mensagem estiver armazenada no bloco de mensagens single_assignment no momento.

Confira também

Namespace de concorrência
Classe overwrite_buffer
Classe unbounded_buffer