2010-03-26 104 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