X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ec6ad1cda462aea8684decc3672c753715c1bf70..090cf2282f07bf598ff25bf0740e35268b20b699:/src/simix/private.h diff --git a/src/simix/private.h b/src/simix/private.h index e4cb08d959..ac1f6234d7 100644 --- a/src/simix/private.h +++ b/src/simix/private.h @@ -72,6 +72,7 @@ extern SIMIX_Global_t simix_global; int iwannadie : 1; smx_mutex_t mutex; /* mutex on which the process is blocked */ smx_cond_t cond; /* cond on which the process is blocked */ + smx_sem_t sem; /* semaphore on which the process is blocked */ smx_action_t waiting_action; xbt_dict_t properties; void *data; /* kept for compatibility, it should be replaced with moddata */ @@ -93,7 +94,6 @@ typedef struct s_smx_process_arg { void SIMIX_create_maestro_process(void); void SIMIX_process_empty_trash(void); void SIMIX_process_schedule(smx_process_t process); -void SIMIX_process_yield(void); ex_ctx_t *SIMIX_process_get_exception(void); void SIMIX_process_exception_terminate(xbt_ex_t * e); @@ -118,6 +118,15 @@ typedef struct s_smx_cond { } s_smx_cond_t; +typedef struct s_smx_sem { + /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_sem */ + xbt_swag_t sleeping; /* list of sleeping process */ + int capacity; + xbt_fifo_t actions; /* list of actions */ + /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_sem */ + +} s_smx_sem_t; + /******************************* Networking ***********************************/ /** @brief Rendez-vous point datatype */ @@ -126,6 +135,7 @@ typedef struct s_smx_rvpoint { smx_mutex_t read; smx_mutex_t write; xbt_fifo_t comm_fifo; + void *data; } s_smx_rvpoint_t; typedef struct s_smx_comm { @@ -133,7 +143,7 @@ typedef struct s_smx_comm { smx_comm_type_t type; /* Type of the communication (comm_send,comm_recv) */ smx_rdv_t rdv; /* Rendez-vous where the comm is queued */ - smx_cond_t cond; /* Condition associated to the surf simulation */ + smx_sem_t sem; /* Semaphore associated to the surf simulation */ int refcount; /* Number of processes involved in the cond */ /* Surf action data */ @@ -151,6 +161,14 @@ typedef struct s_smx_comm { void *data; /* User data associated to communication */ } s_smx_comm_t; +void SIMIX_network_copy_data(smx_comm_t comm); +smx_comm_t SIMIX_communication_new(smx_comm_type_t type); +void SIMIX_communication_destroy(smx_comm_t comm); +static inline void SIMIX_communication_use(smx_comm_t comm); +static inline void SIMIX_communication_wait_for_completion(smx_comm_t comm, double timeout); +static inline void SIMIX_rdv_push(smx_rdv_t rdv, smx_comm_t comm); +static inline void SIMIX_rdv_remove(smx_rdv_t rdv, smx_comm_t comm); + /********************************* Action *************************************/ typedef enum {ready, ongoing, done, failed} smx_action_state_t; @@ -160,6 +178,7 @@ typedef enum {ready, ongoing, done, failed} smx_action_state_t; typedef struct s_smx_action { char *name; /**< @brief action name if any */ xbt_fifo_t cond_list; /*< conditional variables that must be signaled when the action finish. */ + xbt_fifo_t sem_list; /*< semaphores that must be signaled when the action finish. */ void *data; /**< @brief user data */ int refcount; /**< @brief reference counter */ surf_action_t surf_action; /* SURF modeling of computation */