/* * Test pthread creation at different thread priorities. */ int main(int argc, char* argv[]) { pthread_mutexattr_t mutexattr; int i, retc, protocol, nopi = 0; cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(0, &mask); setup(); rt_init("h",parse_args,argc,argv); if ((retc = pthread_barrier_init(&barrier, NULL, 5))) { printf("pthread_barrier_init failed: %s\n", strerror(retc)); exit(retc); } retc = sched_setaffinity(0, sizeof(mask), &mask); if (retc < 0) { printf("Main Thread: Can't set affinity: %d %s\n", retc, strerror(retc)); exit(-1); } for (i=0;i<argc;i++) { if (strcmp(argv[i],"nopi") == 0) nopi = 1; } printf("Start %s\n",argv[0]); if (!nopi) { if (pthread_mutexattr_init(&mutexattr) != 0) { printf("Failed to init mutexattr\n"); } if (pthread_mutexattr_setprotocol(&mutexattr, PTHREAD_PRIO_INHERIT) != 0) { printf("Can't set protocol prio inherit\n"); } if (pthread_mutexattr_getprotocol(&mutexattr, &protocol) != 0) { printf("Can't get mutexattr protocol\n"); } else { printf("protocol in mutexattr is %d\n", protocol); } if ((retc = pthread_mutex_init(&glob_mutex, &mutexattr)) != 0) { printf("Failed to init mutex: %d\n", retc); } } create_other_thread(func_nonrt,NULL); create_rr_thread(func_rt, NULL, 20); create_rr_thread(func_rt, NULL, 30); create_rr_thread(func_rt, NULL, 40); create_rr_thread(func_noise, NULL, 40); printf("Joining threads\n"); join_threads(); printf("Done\n"); printf("Criteria:Low Priority Thread should Preempt Higher Priority Noise Thread\n"); return 0; }
/* * Test pthread creation at different thread priorities. */ int main(int argc, char *argv[]) { int i, retc, nopi = 0; cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(0, &mask); setup(); rt_init("h", parse_args, argc, argv); retc = pthread_barrier_init(&barrier, NULL, 5); if (retc) { printf("pthread_barrier_init failed: %s\n", strerror(retc)); exit(retc); } retc = sched_setaffinity(0, sizeof(mask), &mask); if (retc < 0) { printf("Main Thread: Can't set affinity: %d %s\n", retc, strerror(retc)); exit(-1); } for (i = 0; i < argc; i++) { if (strcmp(argv[i], "nopi") == 0) nopi = 1; } printf("Start %s\n", argv[0]); glob_mutex = malloc(sizeof(pthread_mutex_t)); if (glob_mutex == NULL) { printf("Malloc failed\n"); exit(errno); } if (!nopi) init_pi_mutex(glob_mutex); create_other_thread(func_nonrt, NULL); create_rr_thread(func_rt, NULL, 20); create_rr_thread(func_rt, NULL, 30); create_rr_thread(func_rt, NULL, 40); create_rr_thread(func_noise, NULL, 40); printf("Joining threads\n"); join_threads(); printf("Done\n"); pthread_mutex_destroy(glob_mutex); pthread_mutex_destroy(&cond_mutex); pthread_cond_destroy(&cond_var); return 0; }
/* * Test pthread creation at different thread priorities. */ int main(int argc, char *argv[]) { int i, retc, nopi = 0; cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(0, &mask); setup(); rt_init("h", parse_args, argc, argv); retc = pthread_barrier_init(&barrier, NULL, 5); if (retc) { printf("pthread_barrier_init failed: %s\n", strerror(retc)); exit(retc); } retc = sched_setaffinity(0, sizeof(mask), &mask); if (retc < 0) { printf("Main Thread: Can't set affinity: %d %s\n", retc,\ strerror(retc)); exit(-1); } for (i = 0; i < argc; i++) { if (strcmp(argv[i], "nopi") == 0) nopi = 1; } printf("Start %s\n", argv[0]); if (!nopi) init_pi_mutex(&glob_mutex); create_rr_thread(func_lowrt, NULL, 10); create_rr_thread(func_rt, NULL, 20); create_fifo_thread(func_rt, NULL, 30); create_fifo_thread(func_rt, NULL, 40); create_rr_thread(func_noise, NULL, 40); printf("Joining threads\n"); join_threads(); printf("Done\n"); printf("Criteria: Low Priority Thread and High Priority Thread "\ "should prempt each other multiple times\n"); pthread_mutex_destroy(&glob_mutex); pthread_mutex_destroy(&cond_mutex); pthread_cond_destroy(&cond_var); return 0; }