MCPcopy Create free account
hub / github.com/David-Haim/concurrencpp / share

Method share

source/results/impl/result_state.cpp:80–100  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

78}
79
80void concurrencpp::details::result_state_base::share(const std::shared_ptr<shared_result_state_base>& shared_result_state) noexcept {
81 const auto state = m_pc_state.load(std::memory_order_acquire);
82 if (state == pc_state::producer_done) {
83 return shared_result_state->on_result_finished();
84 }
85
86 m_consumer.set_shared_context(shared_result_state);
87
88 auto expected_state = pc_state::idle;
89 const auto idle = m_pc_state.compare_exchange_strong(expected_state,
90 pc_state::consumer_set,
91 std::memory_order_acq_rel,
92 std::memory_order_acquire);
93
94 if (idle) {
95 return;
96 }
97
98 assert_done();
99 shared_result_state->on_result_finished();
100}
101
102void result_state_base::try_rewind_consumer() noexcept {
103 const auto pc_state = m_pc_state.load(std::memory_order_acquire);

Callers

nothing calls this directly

Calls 2

on_result_finishedMethod · 0.80
set_shared_contextMethod · 0.80

Tested by

no test coverage detected