В языке c в многопоточном приложении как clock () считает время? - PullRequest
0 голосов
/ 09 февраля 2019

Я не слишком много занимался многопоточной разработкой на C, и ранее сегодня мне стало интересно узнать о функции библиотеки clock () .

Как он будет вести себя в многопоточном приложении (я буду предполагать использование pthread)?Будет ли он подсчитывать количество тактов с момента запуска потока или с момента запуска исходной программы?

Давайте предположим, что я работаю на обычном двухъядерном процессоре, как старый честный core 2 duo, и два потока выполняются одновременнопытаясь посчитать время, используя часы ().

  1. Будет ли получено общее количество тактов с момента запуска материнского приложения или счетчик
  2. , запущенный с момента запуска собственного потока, или
  3. что-то третье?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Функция библиотеки C clock() должна возвращать количество тактов с момента запуска процесса.

В действительности ядро, вероятно (см. Примечание), имеет переменную "current_ticks_since_boot" и запоминает, когдапроцесс был запущен и делает что-то вроде "current_ticks_since_boot - process->start_time".Не имеет значения, сколько потоков запущено (на каком количестве процессоров), или если ни один из потоков процесса не запущен (например, все заблокированы, ожидая чего-то).

Примечание: Современные ядра обычно используютПеременные «на процессор» для отслеживания текущих тиков с момента загрузки и для синхронизации переменных для каждого ЦП, и могут (делать) использовать встроенный в ЦП счетчик, который может подвергаться воздействию пространства пользователя, чтобы избежать затратвызова API ядра.

0 голосов
/ 09 февраля 2019

В Linux и других системах POSIX-ish clock подсчитывает общее количество тактов процессора, потребляемых всеми потоками.Подсчитывается каждое логическое ядро ​​ЦП, поэтому, если у вас два потока, каждый из которых использует все ядро, каждая секунда настенных часов будет считаться примерно двумя секундами времени ЦП.

В Windows clock, в нарушение стандарта, делает что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...