2010-03-26 70 views
4

如何測量互斥量,信號量或futex的延遲?我的意思是兩個事件之間的延遲:解鎖先前鎖定的互斥鎖和互斥鎖。有兩種情況:所有線程/進程在同一個CPU上時(重新調度線程需要多長時間)以及第一個線程在第一個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 k個圈),所以我不能用gettimeofday()

回答

3

可以使用高精度計時器。 clock_gettime與CLOCK_MONOTONIC_HR (我知道這是一歲多,但仍然有人可能有同樣的問題)

+0

或我可以直接使用CPU時鐘計數器(RDTSC)? – osgx 2011-06-24 16:18:10