#include "il2cpp-config.h" #include "icalls/mscorlib/System.Threading/ThreadPool.h" #include "os/Environment.h" #include "vm/Exception.h" #include "vm/ThreadPool.h" namespace il2cpp { namespace icalls { namespace mscorlib { namespace System { namespace Threading { void ThreadPool::GetMaxThreads(int32_t* workerThreads, int32_t* completionPortThreads) { vm::ThreadPool::Configuration configuration = vm::ThreadPool::GetConfiguration(); if (workerThreads) *workerThreads = configuration.maxThreads; if (completionPortThreads) *completionPortThreads = configuration.maxAsyncIOThreads; } void ThreadPool::GetMinThreads(int32_t* workerThreads, int32_t* completionPortThreads) { vm::ThreadPool::Configuration configuration = vm::ThreadPool::GetConfiguration(); if (workerThreads) *workerThreads = configuration.minThreads; if (completionPortThreads) *completionPortThreads = configuration.minAsyncIOThreads; } bool ThreadPool::SetMinThreads(int32_t workerThreads, int32_t completionPortThreads) { vm::ThreadPool::Configuration configuration = vm::ThreadPool::GetConfiguration(); int numCoresAvailable = os::Environment::GetProcessorCount(); if (workerThreads < numCoresAvailable || workerThreads > configuration.maxThreads) return false; if (completionPortThreads < numCoresAvailable || completionPortThreads > configuration.maxAsyncIOThreads) return false; configuration.minThreads = workerThreads; configuration.minAsyncIOThreads = completionPortThreads; vm::ThreadPool::SetConfiguration(configuration); return true; } bool ThreadPool::SetMaxThreads(int32_t workerThreads, int32_t completionPortThreads) { vm::ThreadPool::Configuration configuration = vm::ThreadPool::GetConfiguration(); if (workerThreads < configuration.minThreads) return false; if (completionPortThreads < configuration.minAsyncIOThreads) return false; configuration.maxThreads = workerThreads; configuration.maxAsyncIOThreads = completionPortThreads; vm::ThreadPool::SetConfiguration(configuration); return true; } void ThreadPool::GetAvailableThreads(int32_t* workerThreads, int32_t* completionPortThreads) { vm::ThreadPool::Configuration configuration = vm::ThreadPool::GetConfiguration(); if (workerThreads) *workerThreads = configuration.availableThreads; if (completionPortThreads) *completionPortThreads = configuration.availableAsyncIOThreads; } } /* namespace Threading */ } /* namespace System */ } /* namespace mscorlib */ } /* namespace icalls */ } /* namespace il2cpp */