14#ifndef SIMICS_SYSTEMC_THREAD_POOL_H
15#define SIMICS_SYSTEMC_THREAD_POOL_H
23#include <unordered_map>
65 void thread_function();
68 sc_core::sc_process_handle process_handle_;
69 sc_core::sc_thread_process *thread_process_;
70 sc_core::sc_event wait_for_work_;
75template<
class TThread = Thread>
92 void allocateThread() {
93 TThread *t =
new TThread;
98 void run(ThreadInterface *
call)
override {
101 void block(ThreadInterface *
call)
override {
104 void finish(ThreadInterface *
call)
override {
105 auto it = active_.find(
call);
106 ASSERT(it != active_.end());
107 it->second->finish(
call);
110 it->second =
nullptr;
113 void exception(ThreadInterface *
call)
override {
117 iface::SimulationInterface *simulation(ThreadInterface *
call)
override {
118 return active_[
call]->simulation(
call);
121 std::queue<ThreadInterface *> idle_;
122 std::unordered_map<ThreadInterface *, ThreadCallbackInterface *> active_;
Definition: kernel_state_modifier.h:31
Definition: thread_pool.h:31
virtual iface::SimulationInterface * simulation(ThreadInterface *call)=0
virtual void exception(ThreadInterface *call)=0
virtual ~ThreadCallbackInterface()
Definition: thread_pool.h:33
virtual void block(ThreadInterface *call)=0
virtual void run(ThreadInterface *call)=0
virtual void finish(ThreadInterface *call)=0
Definition: thread_pool.h:42
virtual CallReturn call(ThreadCallbackInterface *cb)=0
virtual ~ThreadInterface()
Definition: thread_pool.h:50
CallReturn
Definition: thread_pool.h:44
@ CALL_RETURN_TERMINATED
Definition: thread_pool.h:47
@ CALL_RETURN_WAITING
Definition: thread_pool.h:46
@ CALL_RETURN_ERROR_IN_USE
Definition: thread_pool.h:48
@ CALL_RETURN_FINISHED
Definition: thread_pool.h:45
Definition: thread_pool.h:76
CallReturn call(ThreadCallbackInterface *cb) override
Definition: thread_pool.h:79
Definition: thread_pool.h:55
CallReturn call(ThreadCallbackInterface *cb) override
virtual const char * thread_name()
Interface to the SystemC simulation.
Definition: simulation_interface.h:25