void tests_flag(void) { unsigned myid = my_cpu_info()->cpu_id; static flag_t flag = FLAG_INITIALIZER; barrier(&global_barrier); if (myid == 0) { udelay(1000000); printf("[0] signal flag\n"); flag_signal(&flag); udelay(1000000); printf("[0] signal second flag\n"); flag_signal(&flag); udelay(2000000); printf("[0] signal third flag\n"); flag_signal(&flag); } else if (myid == 1) { flag_wait(&flag); printf("[1] detected flag\n"); flag_wait(&flag); printf("[1] detected second flag\n"); while (!flag_trywait(&flag)) { udelay(100000); printf("z"); } printf("[1] detected third flag\n"); } }
void task5(void) { task_sleep(); lprintf("start task5\n"); for (;;) { flag_wait(&wait_flag); lprintf("wakeup task5\n"); } }