2
0
mirror of https://github.com/boostorg/fiber.git synced 2026-02-20 02:32:19 +00:00

replace atomic< scheduler > by raw pointer

- to synchronize, use a fence in scheduler::detach_worker_context()
  and scheduler::attach_worker_context()
This commit is contained in:
oliver Kowalke
2016-05-23 09:02:01 +02:00
parent c9fd43549b
commit 4c8ccf384a
5 changed files with 24 additions and 25 deletions

View File

@@ -386,13 +386,15 @@ scheduler::attach_worker_context( context * ctx) noexcept {
BOOST_ASSERT( ! ctx->terminated_is_linked() );
BOOST_ASSERT( ! ctx->wait_is_linked() );
BOOST_ASSERT( ! ctx->worker_is_linked() );
BOOST_ASSERT( nullptr == ctx->scheduler_.load() );
BOOST_ASSERT( nullptr == ctx->scheduler_);
ctx->worker_link( worker_queue_);
ctx->scheduler_ = this;
std::atomic_thread_fence(std::memory_order_release);
}
void
scheduler::detach_worker_context( context * ctx) noexcept {
std::atomic_thread_fence(std::memory_order_acquire);
BOOST_ASSERT( nullptr != ctx);
BOOST_ASSERT( ! ctx->ready_is_linked() );
BOOST_ASSERT( ! ctx->sleep_is_linked() );