1 /* 2 * 3 * This file is part of MUMPS 5.1.2, released 4 * on Mon Oct 2 07:37:01 UTC 2017 5 * 6 * 7 * Copyright 1991-2017 CERFACS, CNRS, ENS Lyon, INP Toulouse, Inria, 8 * University of Bordeaux. 9 * 10 * This version of MUMPS is provided to you free of charge. It is 11 * released under the CeCILL-C license: 12 * http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html 13 * 14 */ 15 #ifndef MUMPS_IO_THREAD_H 16 #define MUMPS_IO_THREAD_H 17 #include "mumps_compat.h" 18 #include "mumps_c_types.h" 19 #if ! defined (MUMPS_WIN32) && ! defined (WITHOUT_PTHREAD) 20 # include <unistd.h> 21 # include <pthread.h> 22 # include <sys/types.h> 23 # include <sys/time.h> 24 # include <time.h> 25 # define MAX_IO 20 26 # define MAX_FINISH_REQ 40 27 # define IO_FLAG_STOP 1 28 # define IO_FLAG_RUN 0 29 # define IO_READ 1 30 # define IO_WRITE 0 31 struct request_io{ 32 MUMPS_INT inode; 33 MUMPS_INT req_num; /*request number*/ 34 void* addr; /*memory address (either source or dest)*/ 35 long long size; /* size of the requested io (unit=size of elementary mumps data)*/ 36 long long vaddr; /* virtual address for file management */ 37 MUMPS_INT io_type; /*read or write*/ 38 MUMPS_INT file_type; /* cb or lu or ... */ 39 pthread_cond_t local_cond; 40 MUMPS_INT int_local_cond; 41 }; 42 /* Exported global variables */ 43 extern MUMPS_INT io_flag_stop,current_req_num; 44 extern pthread_t io_thread,main_thread; 45 extern pthread_mutex_t io_mutex; 46 extern pthread_cond_t cond_io,cond_nb_free_finished_requests,cond_nb_free_active_requests,cond_stop; 47 extern pthread_mutex_t io_mutex_cond; 48 extern MUMPS_INT int_sem_io,int_sem_nb_free_finished_requests,int_sem_nb_free_active_requests,int_sem_stop; 49 extern MUMPS_INT with_sem; 50 extern struct request_io *io_queue; 51 extern MUMPS_INT first_active,last_active,nb_active; 52 extern MUMPS_INT *finished_requests_inode,*finished_requests_id,first_finished_requests, 53 last_finished_requests,nb_finished_requests,smallest_request_id; 54 extern MUMPS_INT mumps_owns_mutex; 55 extern MUMPS_INT test_request_called_from_mumps; 56 /* Exported functions */ 57 void* mumps_async_thread_function_with_sem (void* arg); 58 MUMPS_INT mumps_is_there_finished_request_th(MUMPS_INT* flag); 59 MUMPS_INT mumps_clean_request_th(MUMPS_INT* request_id); 60 MUMPS_INT mumps_wait_req_sem_th(MUMPS_INT *request_id); 61 MUMPS_INT mumps_test_request_th(MUMPS_INT* request_id,MUMPS_INT *flag); 62 MUMPS_INT mumps_wait_request_th(MUMPS_INT *request_id); 63 MUMPS_INT mumps_low_level_init_ooc_c_th(MUMPS_INT* async, MUMPS_INT* ierr); 64 MUMPS_INT mumps_async_write_th(const MUMPS_INT * strat_IO,void * address_block,long long block_size, 65 MUMPS_INT * inode,MUMPS_INT * request_arg,MUMPS_INT * type,long long vaddr,MUMPS_INT * ierr); 66 MUMPS_INT mumps_async_read_th(const MUMPS_INT * strat_IO,void * address_block,long long block_size,MUMPS_INT * inode,MUMPS_INT * request_arg, 67 MUMPS_INT * type,long long vaddr,MUMPS_INT * ierr); 68 MUMPS_INT mumps_clean_io_data_c_th(MUMPS_INT *myid); 69 MUMPS_INT mumps_get_sem(void *arg,MUMPS_INT *value); 70 MUMPS_INT mumps_wait_sem(void *arg,pthread_cond_t *cond); 71 MUMPS_INT mumps_post_sem(void *arg,pthread_cond_t *cond); 72 MUMPS_INT mumps_clean_finished_queue_th(); 73 #endif /*_WIN32 && WITHOUT_PTHREAD*/ 74 #endif /* MUMPS_IO_THREAD_H */ 75