#ifndef MRT_CONCURRENCY_H
#define MRT_CONCURRENCY_H
#include <list>
#include <mutex>
#include <sys/types.h>
#include <unistd.h>
#include "ConcurrencyModel.h"
#include "CJThreadModel/CJThreadModel.h"
#include "Mutator/Mutator.h"
#include "RuntimeConfig.h"
namespace MapleRuntime {
class Concurrency : public ConcurrencyModel {
public:
Concurrency() = default;
~Concurrency() override
{
if (concurrencyModel != nullptr) {
delete concurrencyModel;
concurrencyModel = nullptr;
}
}
void Init(const ConcurrencyParam param, ScheduleType type = SCHEDULE_DEFAULT) override;
void VisitGCRoots(RootVisitor* visitorHandle) override { concurrencyModel->VisitGCRoots(visitorHandle); }
void* GetThreadScheduler() const override { return concurrencyModel->GetThreadScheduler(); }
size_t GetReservedStackSize() const override { return concurrencyModel->GetReservedStackSize(); }
bool GetStackGuardCheckFlag() const override { return concurrencyModel->GetStackGuardCheckFlag(); }
uint32_t GetProcessorNum() const override { return processorNum; }
private:
ConcurrencyModel* concurrencyModel = nullptr;
uint32_t processorNum = 1;
};
}
#endif