#include #include long count1; long count2; volatile int stop; void *thr_routine(void *arg) { while (!stop) { (*(long *)arg)++; pthread_yield(); } return (0); } void alarm_handler(int sig) { stop = 1; } #define TIMEOUT 10 int main(int argc) { pthread_t td1, td2; pthread_attr_t attr; pthread_setconcurrency(1); sleep(1); printf("testing scope process context switch speed...\n"); signal(SIGALRM, alarm_handler); pthread_attr_init(&attr); pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS); pthread_attr_setcreatesuspend_np(&attr); pthread_create(&td1, &attr, thr_routine, &count1); pthread_create(&td2, &attr, thr_routine, &count2); alarm(TIMEOUT); pthread_resume_np(td1); pthread_resume_np(td2); pthread_join(td1, NULL); pthread_join(td2, NULL); printf("context switches:%ld/s\n", (count1+count2)/2/TIMEOUT); printf("testing scope system context switch speed...\n"); count1 = 0; count2 = 0; stop = 0; pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); pthread_create(&td1, &attr, thr_routine, &count1); pthread_create(&td2, &attr, thr_routine, &count2); pthread_attr_destroy(&attr); alarm(TIMEOUT); pthread_resume_np(td1); pthread_resume_np(td2); pthread_join(td1, NULL); pthread_join(td2, NULL); printf("context switches:%ld/s\n", (count1+count2)/2/TIMEOUT); return (0); }