Skip to content
Snippets Groups Projects
Commit fc1d42ef authored by Florian Schmaus's avatar Florian Schmaus
Browse files

Merge branch 'start_actor_from_anywhere' into 'master'

Allow an actor to be startet from anywhere

See merge request !43
parents 47e4158c df9a5da5
No related branches found
No related tags found
1 merge request!43Allow an actor to be startet from anywhere
Pipeline #53747 passed
// SPDX-License-Identifier: LGPL-3.0-or-later
// Copyright © 2020 Florian Schmaus
// Copyright © 2020 Florian Schmaus, Florian Fischer
#pragma once
#include <atomic>
#include <chrono>
#include "CallerEnvironment.hpp"
#include "Fiber.hpp"
#include "UnboundedBlockingMpscQueue.hpp"
......@@ -55,13 +56,20 @@ class Actor {
void stop() { setState(Stopped); }
public:
template <CallerEnvironment callerEnvironment = CallerEnvironment::EMPER>
void start() {
if (state.load(std::memory_order_acquire) != Stopped) return;
Fiber* actorFiber = Fiber::from(std::bind(&Actor::actorLoop, this));
runtime.schedule(*actorFiber);
if constexpr (callerEnvironment == CallerEnvironment::EMPER) {
runtime.schedule(*actorFiber);
} else {
runtime.scheduleFromAnywhere(*actorFiber);
}
}
void startFromAnywhere() { start<CallerEnvironment::ANYWHERE>(); }
void tell(T t) { queue.put(t); }
void tellFromAnywhere(T t) { queue.putFromAnywhere(t); }
......
// SPDX-License-Identifier: LGPL-3.0-or-later
// Copyright © 2020 Florian Fischer
#include <algorithm> // for copy
#include <cstdlib> // for exit, EXIT_FAILURE, EXIT_SUC...
#include <iostream> // for operator<<, basic_ostream
#include <algorithm> // for copy
#include <cstdlib> // for exit, EXIT_FAILURE, EXIT_SUC...
#include <functional> // bind
#include <iostream> // for operator<<, basic_ostream
#include "Actor.hpp" // for Actor
#include "BinaryPrivateSemaphore.hpp" // for BPS
......
// SPDX-License-Identifier: LGPL-3.0-or-later
// Copyright © 2020 Florian Schmaus
#include <algorithm> // for copy
#include <atomic> // for atomic_thread_fence, memory_...
#include <cstdint> // for uint64_t
#include <cstdlib> // for exit, EXIT_FAILURE, EXIT_SUC...
#include <iostream> // for operator<<, basic_ostream
#include <algorithm> // for copy
#include <atomic> // for atomic_thread_fence, memory_...
#include <cstdint> // for uint64_t
#include <cstdlib> // for exit, EXIT_FAILURE, EXIT_SUC...
#include <functional> // for bind
#include <iostream> // for operator<<, basic_ostream
#include "Actor.hpp" // for Actor
#include "CountingPrivateSemaphore.hpp" // for CPS
......
// SPDX-License-Identifier: LGPL-3.0-or-later
// Copyright © 2020 Florian Schmaus
#include <algorithm> // for copy, copy_backward
#include <cstdlib> // for exit, EXIT_FAILURE, EXIT_SUCCESS
#include <algorithm> // for copy, copy_backward
#include <cstdlib> // for exit, EXIT_FAILURE, EXIT_SUCCESS
#include <functional> // for bind
#include <thread>
#include "Actor.hpp"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment