Skip to content
13 changes: 10 additions & 3 deletions stl/src/cthread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
// thread functions

#include "awint.h"
#include <bitset>
#include <process.h>
#include <stdint.h>
#include <stdio.h>
Expand Down Expand Up @@ -99,9 +100,15 @@ _Thrd_id_t _Thrd_id() { // return unique id for current thread
}

unsigned int _Thrd_hardware_concurrency() { // return number of processors
SYSTEM_INFO info;
GetNativeSystemInfo(&info);
return info.dwNumberOfProcessors;
DWORD_PTR process_affinity_mask;
DWORD_PTR system_affinity_mask;
if (GetProcessAffinityMask(GetCurrentProcess(), &process_affinity_mask, &system_affinity_mask)) {
std::bitset<sizeof(DWORD_PTR) * CHAR_BIT> process_affinity_mask_bits(
static_cast<unsigned long long>(process_affinity_mask));
return static_cast<unsigned int>(process_affinity_mask_bits.count());
} else {
return 0;
}
}

// TRANSITION, ABI: _Thrd_create() is preserved for binary compatibility
Expand Down