我是这么算的,结果不是1微秒就是0.5微秒。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/neutrino.h>
#include<sys/time.h>
#include<pthread.h>
#include<sync.h>
#include<errno.h>


void tstart(void);
void tend(void);
double tval(void);
static struct timeval _tstart, _tend;
void* startfunction1(void);
void* startfunction2(void);
barrier_t barrier;

int main()
{

pthread_t thread1,thread2;
pthread_attr_t attr1,attr2;
pthread_attr_init(&attr1);
pthread_attr_init(&attr2);
barrier_init(&barrier,NULL,3);
attr1.param.sched_priority=31;
attr2.param.sched_priority=31;
tstart();
pthread_create(&thread1,&attr1,startfunction1,NULL);
pthread_create(&thread2,&attr2,startfunction2,NULL);

// for(i=0;i<=1000000;i++)
// SchedYield();
barrier_wait(&barrier);
tend();
printf(“time=%7.3fusec/switch\n”,tval());
return EXIT_SUCCESS;
}
void* startfunction1(void)
{
int i;
for(i=0;i<=1000000;i++)
{
if((SchedYield())==-1)
{
printf(“error because %s\n”,strerror(errno));
}
// printf(“in function1\n”);
}
barrier_wait(&barrier);
return (void*)EXIT_SUCCESS;
}

void* startfunction2(void)
{
int i;
for(i=0;i<=1000000;i++)
{
if((SchedYield())==-1)
{
printf(“error because %s\n”,strerror(errno));
}
// printf(“in function1\n”);
}
// printf(“in function2\n”);
barrier_wait(&barrier);
return (void*)EXIT_SUCCESS;
}

void tstart(void)
{
gettimeofday(&_tstart, NULL);
}

void tend(void)
{
gettimeofday(&_tend,NULL);
}

double tval()
{
double t1, t2;

t1 = (double)_tstart.tv_sec + (double)_tstart.tv_usec/(10001000);
t2 = (double)_tend.tv_sec + (double)_tend.tv_usec/(1000
1000);
return t2-t1;
}

任何涉及时间的函数(比如你用的gettimeofday())都受到系统时钟的限制,只有使用ClockCycles()可以获得更精密的计时。参阅ClockCycles()的说明。

还可以参考这篇文章

另外,你的程序不光记录了上下文转换时间,也同时包括了两个线程的启动时间,和三次系统调用的时间。还有,为了减小可能的影响,应该让两个线程运行在高优先级(比如49)上。[/url]