我正在尝试使用线程和管道来测量上下文切换的平均时间,但是当我使用时,clock_gettime()
即使我相信我有适当的头文件,我也会得到“对 clock_gettime() 的未定义引用”。程序应该做的是一个线程将数据写入管道,另一个线程读取数据,在这种情况下,数据是时间,因此可以衡量上下文切换的时间。我的代码如下:
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/time.h>
#include<time.h>
int fd[2];
int n = 0;
long now = 0;
int avg = 0;
struct timespec tv;
void * writeThread()
{
for(n=1000;n>0;n--)
{
clock_gettime(CLOCK_MONOTONIC_RAW,&tv);
now = tv.tv_nsec;
write(fd[1],(void*)&now,sizeof(now));
usleep(1000);
}
return 0;
}
void * readThread()
{
for(n=1000;n>0;n--)
{
int time = read(fd[0],(void*)&now,sizeof(now));
clock_gettime(CLOCK_MONOTONIC_RAW,&tv);
now = tv.tv_nsec;
int switchTime = now - time;
avg = avg + switchTime;
}
avg = avg/1000;
return 0;
}
int main(int argc, char ** argv) {
pthread_t tid1,tid2;
pthread_create(&tid1,NULL,writeThread,NULL);
pthread_create(&tid2,NULL,readThread,NULL);
/*pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
*/
printf("%d",avg);
return 0;
}