То, как можно найти, что процессор нумерует поток, работает?

У меня есть менеджер по неупорядоченному хранению памяти, который делит "кучу" в различные сегменты на основе количества процессоров в системе. Память может только быть выделена на разделе, который идет с процессором в настоящее время рабочего потока. Это поможет позволить различным процессорам продолжать работать, даже если два различных захотят выделить память одновременно, по крайней мере, я верю.

Я нашел функцию GetCurrentProcessorNumber() для Windows, но это только работает над Windows Vista и позже. Существует ли метод, который работает над Windows XP?

Кроме того, это может быть сделано с pthreads в системе POSIX?

15
задан Ajay 4 June 2018 в 17:47
поделиться

3 ответа

Для XP быстрый поиск в Google показал следующее: https://www.cs.tcd.ie/Jeremy.Jones/GetCurrentProcessorNumberXP.htm Это поможет?

8
ответ дан 1 December 2019 в 03:34
поделиться

Из вывода 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)

К сожалению, это специфично для Linux. Я сомневаюсь, что есть переносной способ сделать это.

9
ответ дан 1 December 2019 в 03:34
поделиться

Мне этот дизайн плохо пахнет. Похоже, вы делаете предположение, что поток будет оставаться связанным с конкретным процессором. Это не гарантируется. Да, поток обычно может оставаться на одном ЦП, но это не обязательно, и в конечном итоге ваша программа будет иметь поток, который переключает ЦП. Это может происходить не часто, но рано или поздно это произойдет. Если ваш дизайн не учитывает это, то вы, скорее всего, в конечном итоге столкнетесь с какой-то трудно отслеживаемой ошибкой.

Позвольте мне задать вопрос: что произойдет, если память будет выделена на одном процессоре и освобождена на другом? Как ваша куча с этим справится?

0
ответ дан 1 December 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: