]>
wirehaze git hosting - ppos.git/blob - ppos/test/pingpong-wait-stress.c
1 // PingPongOS - PingPong Operating System
2 // Prof. Carlos A. Maziero, DINF UFPR
3 // Versão 2.0 -- Junho de 2025
5 // ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
6 // ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
8 // Teste da função task_wait() com muitas tarefas
17 static struct task_t
*task
[NUMTASKS
];
19 // simula um processamento pesado
24 for (int i
= 0; i
< n
; i
++)
25 for (int j
= 0; j
< n
; j
++)
33 int max
= 1 + randnum() % 5 ;
35 for (int i
= 0; i
< max
; i
++)
36 hardwork(WORKLOAD
+ randnum() % WORKLOAD
);
38 printf("task %3d: fim\n", task_id(NULL
));
39 task_exit(task_id(NULL
));
42 // corpo da tarefa principal
43 void user_main(void *arg
)
45 int status
, exit_code
;
47 printf("user: inicio\n");
50 printf("Creating %d tasks\n", NUMTASKS
);
51 for (int i
= 0; i
< NUMTASKS
; i
++)
53 task
[i
] = task_create(NULL
, body
, NULL
);
57 // espera tarefas encerrarem
58 for (int i
= 0; i
< NUMTASKS
; i
++)
60 printf("Waiting for task %d\n", task_id(task
[i
]));
61 exit_code
= task_wait(task
[i
]);
62 assert(exit_code
== task_id(task
[i
]));
65 // destroi descritores
66 for (int i
= 0; i
< NUMTASKS
; i
++)
68 status
= task_destroy(task
[i
]);
69 assert(status
== NOERROR
);
72 printf("user: fim\n");