main() { int nprocs = 4; //tempo struct timeval iniciotmp, finaltmp; int tempogasto; int pidf,id_wait; void dt_shareG(); mc_var_inic (); def_task (0, "inicializa_matriz", sizeof (__inicializa_matriz__)); def_task (1, "multiplica_matriz", sizeof (__multiplica_matriz__)); id_wait=sem_wait_inic(2); alloc_proc(nprocs); pidf = exec_task (0, nprocs); /* --- rs30() - create --- */ if (pidf == 0) { inicializa_matriz(); end_task(); /* --- rs31() - create --- */ } wait_all(); gettimeofday(&iniciotmp, NULL); pidf = exec_task (1, nprocs); /* --- rs30() - create --- */ if (pidf == 0) { multiplica_matriz(); end_task(); /* --- rs31() - create --- */ } wait_all(); gettimeofday(&finaltmp, NULL); tempogasto = (int) (1000 * (finaltmp.tv_sec - iniciotmp.tv_sec) + (finaltmp.tv_usec - iniciotmp.tv_usec) / 1000); printf("Tempo decorrido: %d\n", tempogasto); wait_all(); /* --- rs307() */ end_program(); remove_semaforo(id_wait); return 0; }
// have to manage the task stack explicitly void TimeTasks::end_task(TimeTasks::Tasks taskid) { if(!is_output_thread()) return; stack_depth[taskid]--; assert_ge(stack_depth[taskid],0); if(stack_depth[taskid]==0) { end_task(taskid, start_times[taskid]); } }
void clear_all_old_pids_event(void) { int search, pident; struct shared_glm_entry *entry; int found; int taskno; lock_dos(4000); search = num_shared; while (search>0) { search--; entry = glm_entries[search]; pident = entry->number_of_tasks; while (pident>0) { pident--; found = 0; taskno = MAX_THREADS; while ((!found) && (taskno>0)) { taskno--; if (is_alive(taskno)) if (entry->pid_list[pident] == pid_of(taskno)) { found = 1; break; } } if (!found) { entry->number_of_tasks--; for (taskno=pident;taskno<entry->number_of_tasks;taskno++) entry->pid_list[taskno] = entry->pid_list[taskno+1]; } } if (!entry->number_of_tasks) { g_free(entry); num_shared--; for (taskno=search;taskno<num_shared;taskno++) glm_entries[taskno] = glm_entries[taskno+1]; } } unlock_dos(); end_task(); }
int main() { int i, j; int pidf,id_wait; void dt_shareG(); mc_var_inic (); def_task (0, "multiplicarAB", sizeof (__multiplicarAB__)); def_task (1, "multiplicarCD", sizeof (__multiplicarCD__)); def_task (2, "sumar", sizeof (__sumar__)); def_task (3, "print", sizeof (__print__)); id_wait=sem_wait_inic(4); for (i=0; i<100; i++){ for (j = 0; j < 100; j++) { /*A[i][j] = i + j; B[i][j] = i + 2*j; C[i][j] = i*2 + j*3; D[i][j] = i*2 + j;*/ sharedG->A[i][j] = 1; sharedG->B[i][j] = 1; sharedG->C[i][j] = 1; sharedG->D[i][j] = 1; } } alloc_proc(4); pidf = exec_task (0, 1); /* --- rs30() - create --- */ if (pidf == 0) { multiplicarAB(); end_task(); /* --- rs31() - create --- */ } pidf = exec_task (1, 1); /* --- rs30() - create --- */ if (pidf == 0) { multiplicarCD(); end_task(); /* --- rs31() - create --- */ } wait_all(); pidf = exec_task (2, 1); /* --- rs30() - create --- */ if (pidf == 0) { sumar(); end_task(); /* --- rs31() - create --- */ } wait_proc (2); /* --- wait_proc() --- */ pidf = exec_task (3, 1); /* --- rs30() - create --- */ if (pidf == 0) { print(); end_task(); /* --- rs31() - create --- */ } wait_all(); /* --- rs307() */ end_program(); remove_semaforo(id_wait); return 0; }
void update_members_list(void) { int data=(int)schedule_data[tswitch]; char line[140]; int number_users,number; char *outfile; int loop; struct user_data user_ptr; FILE *fileptr,*fileptr2; char temptime[60]; switch (data) { case 0 : outfile=user_member_list; aput_into_buffer(server,"--> Updating USER's Member List",0,5,tswitch,9,0); break; case 1 : outfile=sysop_member_list; aput_into_buffer(server,"--> Updating SYSOP's Member List",0,5,tswitch,9,0); break; default : end_task(); break; } lock_dos(74); if (!(fileptr=g_fopen(userfile,"rb","USER#3"))) { log_error("*user file wouldn't open in update member list"); log_error(userfile); unlock_dos(); end_task(); } if (!(fileptr2=g_fopen(outfile,"wb","USER#4"))) { log_error("*could not open user member list"); log_error(user_member_list); g_fclose(fileptr); unlock_dos(); end_task(); } fseek(fileptr,0,SEEK_SET); fseek(fileptr2,0,SEEK_SET); fscanf(fileptr,"%d\n",&number_users); unlock_dos(); for (number=0;number<number_users;number++) { lock_dos(75); fseek(fileptr, (long int)sizeof(struct user_data)*(number+NUMDEFAULT),SEEK_SET); if (!fread(&user_ptr, sizeof(struct user_data), 1, fileptr)) { log_error("* fread() failed on file in member update"); log_error(userfile); g_fclose(fileptr); g_fclose(fileptr2); unlock_dos(); end_task(); } if (user_ptr.number>=0) { int point; if (data) { sprint_time(temptime,&(user_ptr.expiration)); sprintf(line,"#%03d : %c%s|*r1%c",user_ptr.number,user_ptr.staple[2],user_ptr.handle,user_ptr.staple[3]); point=ansi_strlen(line); // for(loop=0;loop<(40-point);loop++) for(loop=0;loop<(35-point);loop++) strcat(line," "); // fprintf(fileptr2,"%s%-20s %s%c%c",line,user_ptr.real_info.name,user_ptr.real_info.phone,13,10); fprintf(fileptr2,"%s%.17s%c%c",line,temptime,13,10); } else fprintf(fileptr2,"#%03d : %c%s|*r1%c%c%c",user_ptr.number,user_ptr.staple[2],user_ptr.handle,user_ptr.staple[3],13,10); } unlock_dos(); next_task(); } lock_dos(76); if (g_fclose(fileptr)) { log_error("g_fclose failed"); log_error(userfile); g_fclose(fileptr2); unlock_dos(); end_task(); } if (g_fclose(fileptr2)) { log_error("*fclose failed"); log_error(user_member_list); unlock_dos(); end_task(); } unlock_dos(); switch (data) { case 0 : aput_into_buffer(server,"--> Update of USER's Member List DONE",0,5,tswitch,9,0); break; case 1 : aput_into_buffer(server,"--> Update of SYSOP's Member List DONE",0,5,tswitch,9,0); break; default : aput_into_buffer(server,"--> (DEFAULT) Member List Update Done",0,5,tswitch,9,0); break; } end_task(); }
void TimeTasks::end_main_task(TimeTasks::Tasks taskid, double start_time) { if(!is_output_thread()) return; end_task(taskid, start_time); active_task = NONE; }