From 1984801f769c3b5e708070adeb4e8702dd5f2c66 Mon Sep 17 00:00:00 2001 From: Leandre Lacourt <lacourtl@santel.imag.fr> Date: Fri, 7 Jun 2024 14:00:46 +0200 Subject: [PATCH] ajout des start, join, init et reset des taches --- bin/lustre-mt/main.ml | 89 ++++++++++++++++++++++++++----------------- 1 file changed, 53 insertions(+), 36 deletions(-) diff --git a/bin/lustre-mt/main.ml b/bin/lustre-mt/main.ml index b008161..6ef2dbc 100644 --- a/bin/lustre-mt/main.ml +++ b/bin/lustre-mt/main.ml @@ -70,41 +70,59 @@ let main () = in List.iter print_task_structs !tasks; - (* fprintf cfile "/* runners */\n"; - *let print_task_runners task = - * fprintf cfile "void* %s_runner(void* cd) {\n" task.name; - * fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*) cd" task.name task.name; - * fprintf cfile "\twhile(1){\n"; - * fprintf cfile "\t\tSEM_WAIT(ts->sem_start);\n"; - * fprintf cfile "\t\t%s_step(&ts->ctx);\n" task.name; - * fprintf cfile "\t\tSEM_SIGNAL(ts->sem_join);\n"; - * fprintf cfile "\t}\n"; - * fprintf cfile "}\n\n" - *in - *List.iter print_task_runners !tasks; -* - *fprintf cfile "/* task Initializers */\n"; - *let print_task_inits task = - * fprintf cfile "%s_TASK_type %s_TASK_init() {\n" task.name task.name; - * fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*)calloc(1, sizeof(%s_TASK_struct));\n" task.name task.name task.name; - * fprintf cfile "\t%s_ctx_init(&ts->ctx);\n" task.name; - * fprintf cfile "SEM_INIT(ts->sem_start, 0, 1);\n"; - * fprintf cfile "SEM_INIT(ts->sem_join, 0, 1);\n"; - * fprintf cfile "pthread_create(&(ts->thr), NULL, %s_runner, ts);\n" task.name; - * fprintf cfile "return (void*) ts;\n"; - * fprintf cfile "}\n\n" - *in - *List.iter print_task_inits !tasks; - * - *fprintf cfile "/* task resets */\n"; - *let print_task_resets task = - * fprintf cfile "void %s_TASK_reset(%s_TASK_type tD) {\n" task.name task.name; - * fprintf cfile "%s_TASK_struct* ts = (%s_TASK_struct*) tD;\n" task.name task.name; - * fprintf cfile "%s_ctx_reset(&ts->ctx)\n;" task.name; - * fprintf cfile "}\n\n" - *in - *List.iter print_task_resets !tasks; - *) + fprintf cfile "/* runners */\n"; + let print_task_runners task = + fprintf cfile "void* %s_runner(void* cd) {\n" task.name; + fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*) cd\n" task.name task.name; + fprintf cfile "\twhile(1){\n"; + fprintf cfile "\t\tSEM_WAIT(ts->sem_start);\n"; + fprintf cfile "\t\t%s_step(&ts->ctx);\n" task.name; + fprintf cfile "\t\tSEM_SIGNAL(ts->sem_join);\n"; + fprintf cfile "\t}\n"; + fprintf cfile "}\n\n" + in + List.iter print_task_runners !tasks; + + fprintf cfile "/* task Initializers */\n"; + let print_task_inits task = + fprintf cfile "%s_TASK_type %s_TASK_init() {\n" task.name task.name; + fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*)calloc(1, sizeof(%s_TASK_struct));\n" task.name task.name task.name; + fprintf cfile "\t%s_ctx_init(&ts->ctx);\n" task.name; + fprintf cfile "\tSEM_INIT(ts->sem_start, 0, 1);\n"; + fprintf cfile "\tSEM_INIT(ts->sem_join, 0, 1);\n"; + fprintf cfile "\tpthread_create(&(ts->thr), NULL, %s_runner, ts);\n" task.name; + fprintf cfile "\treturn (void*) ts;\n"; + fprintf cfile "}\n\n" + in + List.iter print_task_inits !tasks; + + fprintf cfile "/* task resets */\n"; + let print_task_resets task = + fprintf cfile "void %s_TASK_reset(%s_TASK_type tD) {\n" task.name task.name; + fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*) tD;\n" task.name task.name; + fprintf cfile "\t%s_ctx_reset(&ts->ctx);\n" task.name; + fprintf cfile "}\n\n" + in + List.iter print_task_resets !tasks; + + fprintf cfile "/* task start */\n"; + let print_task_starts task = + fprintf cfile "void %s_TASK_START(%s_TASK_type tD) {\n" task.name task.name; + fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*) tD;\n" task.name task.name; + fprintf cfile "\tSEM_SIGNAL(ts->sem_start);\n"; + fprintf cfile "}\n\n" + in + List.iter print_task_starts !tasks; + + fprintf cfile "/* task join */\n"; + let print_task_joins task = + fprintf cfile "void %s_TASK_JOIN(%s_TASK_type tD) {\n" task.name task.name; + fprintf cfile "\t%s_TASK_struct* ts = (%s_TASK_struct*) tD;\n" task.name task.name; + fprintf cfile "\tSEM_WAIT(ts->sem_join);\n"; + fprintf cfile "}\n\n" + in + List.iter print_task_joins !tasks; + (* fprintf cfile "/* task inputs */\n"; * let print_task_inputs task = @@ -112,7 +130,6 @@ let main () = * task. * in * List.iter print_task_inputs !tasks; - *) -- GitLab