Измерьте мьютекс или латентность фьютекса - PullRequest
4 голосов
/ 26 марта 2010

Как я могу измерить задержку мьютекса, семафора или фьютекса? Я имею в виду задержку между двумя событиями: разблокировать ранее заблокированный мьютекс и блокировку этого мьютекса. Существует два случая: когда все потоки / процессы находятся на одном и том же процессоре (сколько времени потребуется для перепланирования потока) и когда первый поток находится на первом процессоре, а второй - на втором.

Thread1: Lock(Mutex) Critical1 Unlock(Mutex)|<------->|
Thread2:                              while{trylock}  |Lock(Mutex) Critical2 Unlock(Mutex)|

Или даже

Thread1: work..work..very hard..work...  sem_post()|<----->|
Thread2: sem_wait(semaphore)...............................|sem_wait unlocks here work2..

Это время очень короткое (~ 1 k циклов), поэтому я не могу использовать gettimeofday()

1 Ответ

3 голосов
/ 13 июня 2011

Вы можете использовать таймеры высокого разрешения. clock_gettime с CLOCK_MONOTONIC_HR (Я знаю, что это больше года, но у кого-то может возникнуть такой же вопрос)

...