0

我正在尝试使用线程和管道来测量上下文切换的平均时间,但是当我使用时,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;
}
4

0 回答 0