2010-03-26 5 views
4

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

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 к циклов), поэтому я не могу использовать gettimeofday()

ответ

3

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

+0

или я могу использовать непосредственно счетчик часов процессора (RDTSC)? – osgx