2009-07-16 6 views
1

Есть ли способ получить nr процессоров, таких как процессор или ядра в системе? Я собираюсь написать приложение с pthreads, так что если будет вызов posix, это будет здорово. Я знаю о чтении из/proc/cpuinfo, но это не так переносимо. Есть ли еще более портативный способ?Переносный способ получения nr единиц обработки (# cpu, core) в c?

ответ

4

Комитет POSIX (нить) рассмотрел вопрос о поддержке такой операции, но затем refused to. У людей есть collected information о том, как это сделать на разных системах.

+1

Последние два абзаца этой публикации в группе новостей Butenhof особенно подходят, я бы сказал; хотя я бы добавил, что единственный человек, который действительно может ответить на вопрос «сможет ли мое приложение создать другой поток», - это системный администратор, который подразумевает, что «количество потоков» должно быть настраиваемым пользователем. – caf

+0

Если я правильно понимаю сообщения об ошибках на французском языке, эти ссылки сейчас для меня сломаны. – leecbaker

1

Нет способа POSIX, о котором я знаю. Вам нужно отступить и выполнить проверку на платформе, или найти библиотеку, которая уже выполняет проверки для вас.

This page имеет загружаемый код для ряда реализаций UNIX.

0

Насколько мне известно. Под окнами, например, вы получите это из GetSystemInfo. Вероятно, вы можете получить эту информацию на процессорах x86 с помощью вызова ассемблера CPUID, но это нецелесообразно использовать на платформах, отличных от x86.