#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/(10001000);
return t2-t1;
}