void task_M(void* data) { rt_sem_p(&syncsem,TM_INFINITE); rt_task_sleep_ms(1); //rt_sem_p(sem,TM_INFINITE); busy_wait_ms(5); print_pri(NULL,(char) data); //rt_sem_v(sem,TM_INFINITE); }
void medium(){ rt_sem_p(&synca, TM_INFINITE); rt_task_sleep_ms(100); rt_printf("MEDIUM RUNNING\n"); busy_wait_ms(100); busy_wait_ms(100); busy_wait_ms(100); busy_wait_ms(100); busy_wait_ms(100); rt_printf("MEDIUM FINISHED\n"); }
void highFunc() { rt_sem_p(&sem, TM_INFINITE); rt_task_sleep_ms(200); rt_printf("High wants to lock resource\n"); rt_mutex_acquire(&resourceMutex, TM_INFINITE); rt_printf("High locks resource\n"); busy_wait_ms(100); busy_wait_ms(100); rt_printf("High unlocks resource\n"); rt_mutex_release(&resourceMutex); }
void medFunc() { rt_sem_p(&sem, TM_INFINITE); rt_task_sleep_ms(100); rt_printf("med starts running\n"); busy_wait_ms(100); busy_wait_ms(100); busy_wait_ms(100); busy_wait_ms(100); busy_wait_ms(100); rt_printf("med finished\n"); }
void task_H(void* data) { rt_sem_p(&syncsem,TM_INFINITE); rt_task_sleep_ms(1); rt_sem_p(&semB,TM_INFINITE); rt_printf("H : I got B\n"); busy_wait_ms(1); rt_sem_p(&semA,TM_INFINITE); busy_wait_ms(2); print_pri(NULL,(char) data); rt_sem_v(&semB); rt_sem_v(&semA); }
void high(){ rt_sem_p(&synca, TM_INFINITE); rt_task_sleep_ms(200); rt_printf("HIGH RUNNING\n"); rt_sem_p(&semaphore, TM_INFINITE); //rt_mutex_acquire(&mutex, TM_INFINITE); rt_printf("HIGH AQUIRED LCOK\n"); busy_wait_ms(100); busy_wait_ms(100); rt_printf("HIGH FINISHED\n"); rt_sem_v(&semaphore); //rt_mutex_release(&mutex); }
int main(){ mlockall(MCL_CURRENT | MCL_FUTURE); rt_print_auto_init(1); rt_sem_create(&semA, "A", 1, S_FIFO | S_PRIO); rt_sem_create(&semB, "B", 1, S_FIFO | S_PRIO); rt_sem_create(&syncsem, "ss", 0, S_FIFO); RT_TASK tasks[3]; rt_task_create(tasks, "C", 0, 99, T_CPU(0)|T_JOINABLE); //rt_task_create(&(tasks[1]), "B", 0, 50, T_CPU(0)); rt_task_create(tasks+2, "D", 0, 33, T_CPU(0)); rt_task_start(&(tasks[0]),&task_H,(void*)'H'); //rt_task_start(&(tasks[1]),&task_M,(void*)'M'); rt_task_start(&(tasks[2]),&task_L,(void*)'L'); rt_task_shadow(NULL, "main", 0, 0); rt_task_sleep_ms(200); rt_sem_broadcast(&syncsem); //rt_task_sleep_ms(2000); rt_task_join(tasks); rt_task_join(tasks+2); rt_sem_delete(&semA); rt_sem_delete(&semB); /* pthread_t disturbance[10]; for (i=0; i<10; i++){ pthread_create(&(disturbance[i]),NULL,&busy_wait,NULL); } for (i=0; i<10; i++){ pthread_join(disturbance[i],NULL); } */ return 0; };