Untuk XP, google cepat mengungkapkan ini:
https://www.cs.tcd.ie/Jeremy.Jones/GetCurrentProcessorNumberXP.htm Apakah ini membantu?
Jika semua yang ingin Anda lakukan adalah menghindari pertikaian, Anda tidak perlu mengetahui CPU saat ini. Anda bisa memilih tumpukan secara acak. Atau Anda bisa memiliki tumpukan per utas. Meskipun Anda mungkin mendapatkan lebih banyak atau lebih sedikit pendapat seperti itu, Anda akan menghindari overhead polling CPU saat ini, yang mungkin atau mungkin tidak signifikan. Lihat juga scalable_allocator Intel Thread Building Block, yang mungkin telah memecahkan masalah itu lebih baik daripada Anda.
Dari keluaran man sched_getcpu
:
NAME
sched_getcpu - determine CPU on which the calling thread is running
SYNOPSIS
#define _GNU_SOURCE
#include <utmpx.h>
int sched_getcpu(void);
DESCRIPTION
sched_getcpu() returns the number of the CPU
on which the calling thread is currently executing.
RETURN VALUE
On success, sched_getcpu() returns a non-negative CPU number.
On error, -1 is returned and errno is set to indicate the error.
SEE ALSO
getcpu(2)
Sayangnya, ini khusus untuk Linux. Saya ragu ada cara portabel untuk melakukan ini.
Selain jawaban Antony Vennard dan kode di situs yang dikutip, berikut adalah kode yang juga akan berfungsi untuk Visual C++ x64 (tanpa assembler inline):
DWORD GetCurrentProcessorNumberXP() {
int CPUInfo[4];
__cpuid(CPUInfo, 1);
// CPUInfo[1] is EBX, bits 24-31 are APIC ID
if ((CPUInfo[3] & (1 << 9)) == 0) return -1; // no APIC on chip
return (unsigned)CPUInfo[1] >> 24;
}
Sekilas implementasi GetCurrentProcessorNumber() pada Win7 x64 menunjukkan bahwa mereka menggunakan mekanisme yang berbeda untuk mendapatkan nomor prosesor, tetapi dalam (beberapa) pengujian saya hasilnya sama untuk buatan sendiri dan fungsi resmi.