Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Hello xbt/synchro module (synchronization working both in simulation and real life...
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 9 Jul 2007 17:39:13 +0000 (17:39 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 9 Jul 2007 17:39:13 +0000 (17:39 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@3697 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/Makefile.am
src/Makefile.in
src/include/simix/datatypes.h
src/simix/private.h
src/xbt/xbt_os_thread.c
src/xbt/xbt_rl_synchro.c [new file with mode: 0644]
src/xbt/xbt_sg_synchro.c [new file with mode: 0644]

index 08bec14..a99e461 100644 (file)
@@ -133,6 +133,12 @@ XBT_SRC=\
   xbt/cunit.c                                                                \
   xbt/graphxml_parse.c
 
+XBT_RL_SRC = \
+  xbt/xbt_rl_synchro.c
+
+XBT_SG_SRC = \
+  xbt/xbt_sg_synchro.c
+
 SURF_SRC= \
   surf/maxmin.c                                                              \
   surf/lagrange.c                                                            \
@@ -219,6 +225,8 @@ GRAS_RL_SRC= \
   gras/Virtu/rl_dns.c\
   \
   gras/Msg/rl_msg.c
+  
+GRAS_RL_SRC+=$(XBT_RL_SRC)
 
 GRAS_SG_SRC= gras/Transport/sg_transport.c  gras/Transport/transport_plugin_sg.c        \
   \
@@ -228,6 +236,8 @@ GRAS_SG_SRC= gras/Transport/sg_transport.c  gras/Transport/transport_plugin_sg.c
   \
   gras/Msg/sg_msg.c
 
+GRAS_SG_SRC+=$(XBT_SG_SRC)
+
 AMOK_SRC= \
   amok/amok_base.c \
   amok/Bandwidth/bandwidth.c amok/Bandwidth/saturate.c \
index 6d6b956..f54beca 100644 (file)
@@ -85,13 +85,14 @@ am__objects_1 = snprintf.lo xbt_str.lo ex.lo xbt_virtu.lo sysdep.lo \
 am__objects_2 = gras.lo transport.lo msg.lo rpc.lo timer.lo process.lo \
        gras_module.lo ddt_create.lo ddt_convert.lo ddt_exchange.lo \
        cbps.lo datadesc.lo ddt_parse.lo ddt_parse.yy.lo
-am__objects_3 = rl_stubs.lo xbt_os_thread.lo rl_transport.lo \
+am__objects_3 = xbt_rl_synchro.lo
+am__objects_4 = rl_stubs.lo xbt_os_thread.lo rl_transport.lo \
        transport_plugin_file.lo transport_plugin_tcp.lo rl_emul.lo \
-       rl_process.lo rl_time.lo rl_dns.lo rl_msg.lo
-am__objects_4 = amok_base.lo bandwidth.lo saturate.lo \
+       rl_process.lo rl_time.lo rl_dns.lo rl_msg.lo $(am__objects_3)
+am__objects_5 = amok_base.lo bandwidth.lo saturate.lo \
        peermanagement.lo
 am_libgras_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
-       $(am__objects_3) $(am__objects_4)
+       $(am__objects_4) $(am__objects_5)
 libgras_la_OBJECTS = $(am_libgras_la_OBJECTS)
 libgras_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
@@ -130,29 +131,30 @@ am__libsimgrid_la_SOURCES_DIST = xbt/snprintf.c xbt/xbt_str.c xbt/ex.c \
        gras/Transport/sg_transport.c \
        gras/Transport/transport_plugin_sg.c gras/Virtu/sg_emul.c \
        gras/Virtu/sg_process.c gras/Virtu/sg_time.c \
-       gras/Virtu/sg_dns.c gras/Msg/sg_msg.c amok/amok_base.c \
-       amok/Bandwidth/bandwidth.c amok/Bandwidth/saturate.c \
-       amok/PeerManagement/peermanagement.c
-am__objects_5 = maxmin.lo lagrange.lo trace_mgr.lo surf.lo \
+       gras/Virtu/sg_dns.c gras/Msg/sg_msg.c xbt/xbt_sg_synchro.c \
+       amok/amok_base.c amok/Bandwidth/bandwidth.c \
+       amok/Bandwidth/saturate.c amok/PeerManagement/peermanagement.c
+am__objects_6 = maxmin.lo lagrange.lo trace_mgr.lo surf.lo \
        surfxml_parse.lo cpu.lo network.lo workstation.lo \
        surf_timer.lo network_dassf.lo workstation_KCCFLN05.lo
-am__objects_6 = gtnets_simulator.lo gtnets_topology.lo \
+am__objects_7 = gtnets_simulator.lo gtnets_topology.lo \
        gtnets_interface.lo network_gtnets.lo
-@USE_GTNETS_TRUE@am__objects_7 = $(am__objects_6)
-@HAVE_SDP_TRUE@am__objects_8 = sdp.lo
-am__objects_9 = smx_global.lo smx_deployment.lo smx_config.lo \
+@USE_GTNETS_TRUE@am__objects_8 = $(am__objects_7)
+@HAVE_SDP_TRUE@am__objects_9 = sdp.lo
+am__objects_10 = smx_global.lo smx_deployment.lo smx_config.lo \
        smx_environment.lo smx_host.lo smx_process.lo smx_action.lo \
        smx_synchro.lo
-am__objects_10 = context.lo
-am__objects_11 = msg_config.lo task.lo host.lo m_process.lo gos.lo \
+am__objects_11 = context.lo
+am__objects_12 = msg_config.lo task.lo host.lo m_process.lo gos.lo \
        global.lo environment.lo deployment.lo
-am__objects_12 = sd_global.lo sd_link.lo sd_task.lo sd_workstation.lo
-am__objects_13 = sg_transport.lo transport_plugin_sg.lo sg_emul.lo \
-       sg_process.lo sg_time.lo sg_dns.lo sg_msg.lo
-am_libsimgrid_la_OBJECTS = $(am__objects_1) $(am__objects_5) \
-       $(am__objects_7) $(am__objects_8) $(am__objects_9) \
-       $(am__objects_10) $(am__objects_11) $(am__objects_12) \
-       $(am__objects_2) $(am__objects_13) $(am__objects_4)
+am__objects_13 = sd_global.lo sd_link.lo sd_task.lo sd_workstation.lo
+am__objects_14 = xbt_sg_synchro.lo
+am__objects_15 = sg_transport.lo transport_plugin_sg.lo sg_emul.lo \
+       sg_process.lo sg_time.lo sg_dns.lo sg_msg.lo $(am__objects_14)
+am_libsimgrid_la_OBJECTS = $(am__objects_1) $(am__objects_6) \
+       $(am__objects_8) $(am__objects_9) $(am__objects_10) \
+       $(am__objects_11) $(am__objects_12) $(am__objects_13) \
+       $(am__objects_2) $(am__objects_15) $(am__objects_5)
 libsimgrid_la_OBJECTS = $(am_libsimgrid_la_OBJECTS)
 libsimgrid_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
@@ -196,19 +198,19 @@ am__libsimgrid4java_la_SOURCES_DIST = xbt/snprintf.c xbt/xbt_str.c \
        gras/Transport/sg_transport.c \
        gras/Transport/transport_plugin_sg.c gras/Virtu/sg_emul.c \
        gras/Virtu/sg_process.c gras/Virtu/sg_time.c \
-       gras/Virtu/sg_dns.c gras/Msg/sg_msg.c amok/amok_base.c \
-       amok/Bandwidth/bandwidth.c amok/Bandwidth/saturate.c \
-       amok/PeerManagement/peermanagement.c
-am__objects_14 = jxbt_context.lo xbt_os_thread.lo
-am__objects_15 = jxbt_utilities.lo jmsg.lo jmsg_channel.lo \
+       gras/Virtu/sg_dns.c gras/Msg/sg_msg.c xbt/xbt_sg_synchro.c \
+       amok/amok_base.c amok/Bandwidth/bandwidth.c \
+       amok/Bandwidth/saturate.c amok/PeerManagement/peermanagement.c
+am__objects_16 = jxbt_context.lo xbt_os_thread.lo
+am__objects_17 = jxbt_utilities.lo jmsg.lo jmsg_channel.lo \
        jmsg_host.lo jmsg_parallel_task.lo jmsg_process.lo \
        jmsg_task.lo
 @HAVE_JAVA_TRUE@am_libsimgrid4java_la_OBJECTS = $(am__objects_1) \
-@HAVE_JAVA_TRUE@       $(am__objects_5) $(am__objects_7) \
-@HAVE_JAVA_TRUE@       $(am__objects_8) $(am__objects_9) \
-@HAVE_JAVA_TRUE@       $(am__objects_14) $(am__objects_15) \
-@HAVE_JAVA_TRUE@       $(am__objects_11) $(am__objects_2) \
-@HAVE_JAVA_TRUE@       $(am__objects_13) $(am__objects_4)
+@HAVE_JAVA_TRUE@       $(am__objects_6) $(am__objects_8) \
+@HAVE_JAVA_TRUE@       $(am__objects_9) $(am__objects_10) \
+@HAVE_JAVA_TRUE@       $(am__objects_16) $(am__objects_17) \
+@HAVE_JAVA_TRUE@       $(am__objects_12) $(am__objects_2) \
+@HAVE_JAVA_TRUE@       $(am__objects_15) $(am__objects_5)
 libsimgrid4java_la_OBJECTS = $(am_libsimgrid4java_la_OBJECTS)
 libsimgrid4java_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
@@ -218,12 +220,12 @@ PROGRAMS = $(noinst_PROGRAMS)
 am__testall_SOURCES_DIST = ./cunit_unit.c ./ex_unit.c ./dynar_unit.c \
        ./dict_unit.c ./set_unit.c ./swag_unit.c ./xbt_str_unit.c \
        ./config_unit.c simgrid_units_main.c
-@GRAMINE_MODE_FALSE@am__objects_16 = cunit_unit.$(OBJEXT) \
+@GRAMINE_MODE_FALSE@am__objects_18 = cunit_unit.$(OBJEXT) \
 @GRAMINE_MODE_FALSE@   ex_unit.$(OBJEXT) dynar_unit.$(OBJEXT) \
 @GRAMINE_MODE_FALSE@   dict_unit.$(OBJEXT) set_unit.$(OBJEXT) \
 @GRAMINE_MODE_FALSE@   swag_unit.$(OBJEXT) xbt_str_unit.$(OBJEXT) \
 @GRAMINE_MODE_FALSE@   config_unit.$(OBJEXT)
-@GRAMINE_MODE_FALSE@am_testall_OBJECTS = $(am__objects_16) \
+@GRAMINE_MODE_FALSE@am_testall_OBJECTS = $(am__objects_18) \
 @GRAMINE_MODE_FALSE@   simgrid_units_main.$(OBJEXT)
 testall_OBJECTS = $(am_testall_OBJECTS)
 @GRAMINE_MODE_FALSE@testall_DEPENDENCIES = libgras.la
@@ -492,6 +494,12 @@ XBT_SRC = \
   xbt/cunit.c                                                                \
   xbt/graphxml_parse.c
 
+XBT_RL_SRC = \
+  xbt/xbt_rl_synchro.c
+
+XBT_SG_SRC = \
+  xbt/xbt_sg_synchro.c
+
 SURF_SRC = \
   surf/maxmin.c                                                              \
   surf/lagrange.c                                                            \
@@ -566,26 +574,16 @@ GRAS_COMMON_SRC = \
   gras/DataDesc/datadesc_interface.h  gras/DataDesc/datadesc_private.h \
   gras/DataDesc/ddt_parse.c           gras/DataDesc/ddt_parse.yy.c         gras/DataDesc/ddt_parse.yy.h
 
-GRAS_RL_SRC = \
-  gras/rl_stubs.c                     xbt/xbt_os_thread.c                    \
-  \
-  gras/Transport/rl_transport.c          \
-  gras/Transport/transport_plugin_file.c   gras/Transport/transport_plugin_tcp.c  \
-  \
-  gras/Virtu/rl_emul.c \
-  gras/Virtu/rl_process.c        gras/Virtu/rl_time.c \
-  gras/Virtu/rl_dns.c\
-  \
-  gras/Msg/rl_msg.c
-
-GRAS_SG_SRC = gras/Transport/sg_transport.c  gras/Transport/transport_plugin_sg.c        \
-  \
-  gras/Virtu/sg_emul.c \
-  gras/Virtu/sg_process.c        gras/Virtu/sg_time.c     \
-  gras/Virtu/sg_dns.c\
-  \
-  gras/Msg/sg_msg.c
-
+GRAS_RL_SRC = gras/rl_stubs.c xbt/xbt_os_thread.c \
+       gras/Transport/rl_transport.c \
+       gras/Transport/transport_plugin_file.c \
+       gras/Transport/transport_plugin_tcp.c gras/Virtu/rl_emul.c \
+       gras/Virtu/rl_process.c gras/Virtu/rl_time.c \
+       gras/Virtu/rl_dns.c gras/Msg/rl_msg.c $(XBT_RL_SRC)
+GRAS_SG_SRC = gras/Transport/sg_transport.c \
+       gras/Transport/transport_plugin_sg.c gras/Virtu/sg_emul.c \
+       gras/Virtu/sg_process.c gras/Virtu/sg_time.c \
+       gras/Virtu/sg_dns.c gras/Msg/sg_msg.c $(XBT_SG_SRC)
 AMOK_SRC = \
   amok/amok_base.c \
   amok/Bandwidth/bandwidth.c amok/Bandwidth/saturate.c \
@@ -855,6 +853,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xbt_matrix.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xbt_os_thread.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xbt_peer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xbt_rl_synchro.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xbt_sg_synchro.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xbt_str.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xbt_str_unit.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xbt_virtu.Plo@am__quote@
@@ -1237,6 +1237,13 @@ rl_msg.lo: gras/Msg/rl_msg.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rl_msg.lo `test -f 'gras/Msg/rl_msg.c' || echo '$(srcdir)/'`gras/Msg/rl_msg.c
 
+xbt_rl_synchro.lo: xbt/xbt_rl_synchro.c
+@am__fastdepCC_TRUE@   $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xbt_rl_synchro.lo -MD -MP -MF $(DEPDIR)/xbt_rl_synchro.Tpo -c -o xbt_rl_synchro.lo `test -f 'xbt/xbt_rl_synchro.c' || echo '$(srcdir)/'`xbt/xbt_rl_synchro.c
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/xbt_rl_synchro.Tpo $(DEPDIR)/xbt_rl_synchro.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='xbt/xbt_rl_synchro.c' object='xbt_rl_synchro.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xbt_rl_synchro.lo `test -f 'xbt/xbt_rl_synchro.c' || echo '$(srcdir)/'`xbt/xbt_rl_synchro.c
+
 amok_base.lo: amok/amok_base.c
 @am__fastdepCC_TRUE@   $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT amok_base.lo -MD -MP -MF $(DEPDIR)/amok_base.Tpo -c -o amok_base.lo `test -f 'amok/amok_base.c' || echo '$(srcdir)/'`amok/amok_base.c
 @am__fastdepCC_TRUE@   mv -f $(DEPDIR)/amok_base.Tpo $(DEPDIR)/amok_base.Plo
@@ -1552,6 +1559,13 @@ sg_msg.lo: gras/Msg/sg_msg.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sg_msg.lo `test -f 'gras/Msg/sg_msg.c' || echo '$(srcdir)/'`gras/Msg/sg_msg.c
 
+xbt_sg_synchro.lo: xbt/xbt_sg_synchro.c
+@am__fastdepCC_TRUE@   $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xbt_sg_synchro.lo -MD -MP -MF $(DEPDIR)/xbt_sg_synchro.Tpo -c -o xbt_sg_synchro.lo `test -f 'xbt/xbt_sg_synchro.c' || echo '$(srcdir)/'`xbt/xbt_sg_synchro.c
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/xbt_sg_synchro.Tpo $(DEPDIR)/xbt_sg_synchro.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='xbt/xbt_sg_synchro.c' object='xbt_sg_synchro.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xbt_sg_synchro.lo `test -f 'xbt/xbt_sg_synchro.c' || echo '$(srcdir)/'`xbt/xbt_sg_synchro.c
+
 jxbt_context.lo: java/jxbt_context.c
 @am__fastdepCC_TRUE@   $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT jxbt_context.lo -MD -MP -MF $(DEPDIR)/jxbt_context.Tpo -c -o jxbt_context.lo `test -f 'java/jxbt_context.c' || echo '$(srcdir)/'`java/jxbt_context.c
 @am__fastdepCC_TRUE@   mv -f $(DEPDIR)/jxbt_context.Tpo $(DEPDIR)/jxbt_context.Plo
index 3d69b6f..dfcc5a9 100644 (file)
@@ -10,6 +10,7 @@
 #define SIMIX_DATATYPE_H
 #include "xbt/misc.h"
 #include "xbt/swag.h"
+#include "xbt/fifo.h"
 
 SG_BEGIN_DECL()
 
@@ -67,12 +68,16 @@ typedef struct s_smx_simdata_process *smx_simdata_process_t;
 /** @brief Process datatype 
     @ingroup m_datatypes_management_details @{ */
 typedef struct s_smx_process {
- char *name;                   /**< @brief process name if any */
-  smx_simdata_process_t simdata;       /**< @brief simulator data */
-  s_xbt_swag_hookup_t process_hookup;
-  s_xbt_swag_hookup_t synchro_hookup;
-  s_xbt_swag_hookup_t host_proc_hookup;
-  void *data;                  /**< @brief user data */
+
+   /* KEEP IT IN SYNC WITH s_xbt_thread_ from src/xbt_sg_thread.h */
+   char *name;                 /**< @brief process name if any */
+   smx_simdata_process_t simdata;      /**< @brief simulator data */
+   s_xbt_swag_hookup_t process_hookup;
+   s_xbt_swag_hookup_t synchro_hookup;
+   s_xbt_swag_hookup_t host_proc_hookup;
+   void *data;                 /**< @brief user data */
+   /* KEEP IT IN SYNC WITH s_smx_process_ from src/xbt_sg_thread.h */
+
 } s_smx_process_t;
 /** @} */
 /** @brief Agent datatype  
index a961d89..91252f0 100644 (file)
@@ -69,15 +69,21 @@ typedef struct s_smx_process_arg {
 /********************************* Mutex and Conditional ****************************/
 
 typedef struct s_smx_mutex {
-       xbt_swag_t sleeping;                    /* list of sleeping process */
-       int using;
+
+   /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_mutex */
+   xbt_swag_t sleeping;                        /* list of sleeping process */
+   int using;
+   /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_mutex */
 
 } s_smx_mutex_t;
 
 typedef struct s_smx_cond {
-       xbt_swag_t sleeping;                    /* list of sleeping process */
-       smx_mutex_t  mutex;
-       xbt_fifo_t actions;                     /* list of actions */
+   
+   /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_cond */
+   xbt_swag_t sleeping;                        /* list of sleeping process */
+   smx_mutex_t  mutex;
+   xbt_fifo_t actions;                 /* list of actions */
+   /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_cond */
 
 } s_smx_cond_t;
 
index 91b38fe..a4b7fa8 100644 (file)
@@ -23,6 +23,7 @@
 #include <pthread.h>
 
 typedef struct xbt_os_thread_ {
+  /* KEEP IT IN SYNC WITH xbt_thread.c */
    pthread_t t;
    void *param;
    pvoid_f_pvoid_t *start_routine;
@@ -99,6 +100,7 @@ void xbt_os_thread_yield(void) {
 }
 /****** mutex related functions ******/
 typedef struct xbt_os_mutex_ {
+  /* KEEP IT IN SYNC WITH xbt_thread.c */
    pthread_mutex_t m;
 } s_xbt_os_mutex_t;
 
@@ -142,6 +144,7 @@ void xbt_os_mutex_destroy(xbt_os_mutex_t mutex) {
 
 /***** condition related functions *****/
 typedef struct xbt_os_cond_ {
+  /* KEEP IT IN SYNC WITH xbt_thread.c */
    pthread_cond_t c;
 } s_xbt_os_cond_t;
 
@@ -191,6 +194,7 @@ void xbt_os_cond_destroy(xbt_os_cond_t cond){
 #elif defined(WIN32)
 
 typedef struct xbt_os_thread_ {
+  /* KEEP IT IN SYNC WITH xbt_thread */
   HANDLE handle;                  /* the win thread handle        */
   unsigned long id;               /* the win thread id            */
   pvoid_f_pvoid_t *start_routine;
@@ -272,6 +276,7 @@ void xbt_os_thread_yield(void) {
 
 /****** mutex related functions ******/
 typedef struct xbt_os_mutex_ {
+  /* KEEP IT IN SYNC WITH xbt_thread.c */
    CRITICAL_SECTION lock;   
 } s_xbt_os_mutex_t;
 
@@ -311,6 +316,7 @@ void xbt_os_mutex_destroy(xbt_os_mutex_t mutex) {
  };
 
 typedef struct xbt_os_cond_ {
+  /* KEEP IT IN SYNC WITH xbt_thread.c */
    HANDLE events[MAX_EVENTS];
    
    unsigned int waiters_count;           /* the number of waiters                        */
diff --git a/src/xbt/xbt_rl_synchro.c b/src/xbt/xbt_rl_synchro.c
new file mode 100644 (file)
index 0000000..1a6b52f
--- /dev/null
@@ -0,0 +1,116 @@
+/* $Id$ */
+
+/* xbt_synchro -- Synchronization virtualized depending on whether we are   */
+/*                in simulation or real life (act on simulated processes)   */
+
+/* This is the real life implementation, using xbt_os_thread to be portable */
+/* to windows and linux.                                                    */
+
+/* Copyright 2006,2007 Malek Cherier, Martin Quinson          
+ * All right reserved.                                                      */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#include "xbt/sysdep.h"
+#include "xbt/ex.h"
+#include "portable.h"
+
+#include "xbt/synchro.h"       /* This module */
+#include "xbt/xbt_os_thread.h" /* The implementation we use */
+
+/* the implementation would be cleaner (and faster) with ELF symbol aliasing */
+
+
+struct xbt_thread_ {
+   /* KEEP IT IN SYNC WITH xbt_os_thread (both win and lin parts) */
+#ifdef HAVE_PTHREAD_H
+   pthread_t t;
+   void *param;
+   pvoid_f_pvoid_t *start_routine;
+#elif defined(WIN32)
+   HANDLE handle;                  /* the win thread handle        */
+   unsigned long id;               /* the win thread id            */
+   pvoid_f_pvoid_t *start_routine;
+   void* param;
+#endif
+};
+
+xbt_thread_t xbt_thread_create(pvoid_f_pvoid_t start_routine,
+                              void* param)  {
+   return (xbt_thread_t)xbt_os_thread_create(start_routine,param);
+}
+
+void 
+xbt_thread_join(xbt_thread_t thread,void ** thread_return) {
+   xbt_os_thread_join( (xbt_os_thread_t)thread, thread_return );
+}                     
+
+void xbt_thread_exit(int *retval) {
+   xbt_os_thread_exit( retval );
+}
+
+xbt_thread_t xbt_thread_self(void) {
+   return (xbt_thread_t)xbt_os_thread_self();
+}
+
+void xbt_thread_yield(void) {
+   xbt_os_thread_yield();
+}
+/****** mutex related functions ******/
+struct xbt_mutex_ {
+   /* KEEP IT IN SYNC WITH OS IMPLEMENTATION (both win and lin) */
+#ifdef HAVE_PTHREAD_H   
+   pthread_mutex_t m;
+#elif defined(WIN32)
+   CRITICAL_SECTION lock;   
+#endif   
+};
+
+xbt_mutex_t xbt_mutex_init(void) {
+   return (xbt_mutex_t)xbt_os_mutex_init();
+}
+
+void xbt_mutex_lock(xbt_mutex_t mutex) {
+   xbt_os_mutex_lock( (xbt_os_mutex_t)mutex );
+}
+
+void xbt_mutex_unlock(xbt_mutex_t mutex) {
+   xbt_os_mutex_unlock( (xbt_os_mutex_t)mutex );
+}
+
+void xbt_mutex_destroy(xbt_mutex_t mutex) {
+   xbt_os_mutex_destroy( (xbt_os_mutex_t)mutex );
+}
+
+/***** condition related functions *****/
+typedef struct xbt_cond_ {
+   /* KEEP IT IN SYNC WITH OS IMPLEMENTATION (both win and lin) */
+#ifdef HAVE_PTHREAD_H   
+   pthread_cond_t c;
+#elif defined(WIN32)   
+   HANDLE events[MAX_EVENTS];
+   
+   unsigned int waiters_count;           /* the number of waiters                        */
+   CRITICAL_SECTION waiters_count_lock;  /* protect access to waiters_count  */
+#endif
+} s_xbt_cond_t;
+
+xbt_cond_t xbt_cond_init(void) {
+   return (xbt_cond_t) xbt_os_cond_init();
+}
+
+void xbt_cond_wait(xbt_cond_t cond, xbt_mutex_t mutex) {
+   xbt_os_cond_wait( (xbt_os_cond_t)cond, (xbt_os_mutex_t)mutex );
+}
+
+void xbt_cond_signal(xbt_cond_t cond) {
+   xbt_os_cond_signal( (xbt_os_cond_t)cond );
+}
+        
+void xbt_cond_broadcast(xbt_cond_t cond){
+   xbt_os_cond_broadcast( (xbt_os_cond_t)cond );
+}
+void xbt_cond_destroy(xbt_cond_t cond){
+   xbt_os_cond_destroy( (xbt_os_cond_t)cond );
+}
diff --git a/src/xbt/xbt_sg_synchro.c b/src/xbt/xbt_sg_synchro.c
new file mode 100644 (file)
index 0000000..080ab79
--- /dev/null
@@ -0,0 +1,108 @@
+/* $Id$ */
+
+/* xbt_synchro -- Synchronization virtualized depending on whether we are   */
+/*                in simulation or real life (act on simulated processes)   */
+
+/* This is the simulation implementation, using simix.                      */
+
+/* Copyright 2006,2007 Malek Cherier, Martin Quinson          
+ * All right reserved.                                                      */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#include "xbt/ex.h"
+
+#include "xbt/synchro.h"     /* This module */
+
+#include "simix/simix.h"     /* used implementation */
+#include "simix/datatypes.h"
+
+/* the implementation would be cleaner (and faster) with ELF symbol aliasing */
+
+typedef struct s_xbt_thread_ {
+   /* KEEP IT IN SYNC WITH s_smx_process_ from src/include/simix/datatypes.h */
+   char *name;                 /**< @brief process name if any */
+   smx_simdata_process_t simdata;      /**< @brief simulator data */
+   s_xbt_swag_hookup_t process_hookup;
+   s_xbt_swag_hookup_t synchro_hookup;
+   s_xbt_swag_hookup_t host_proc_hookup;
+   void *data;                 /**< @brief user data */
+   /* KEEP IT IN SYNC WITH s_smx_process_ from src/include/simix/datatypes.h */
+} s_xbt_thread_t;
+
+xbt_thread_t xbt_thread_create(pvoid_f_pvoid_t start_routine, void* param)  {
+   THROW_UNIMPLEMENTED; /* FIXME */
+}
+
+void 
+xbt_thread_join(xbt_thread_t thread,void ** thread_return) {
+   THROW_UNIMPLEMENTED; /* FIXME */
+}                     
+
+void xbt_thread_exit(int *retval) {
+   THROW_UNIMPLEMENTED; /* FIXME */
+}
+
+xbt_thread_t xbt_thread_self(void) {
+   THROW_UNIMPLEMENTED; /* FIXME */   
+}
+
+void xbt_thread_yield(void) {
+   THROW_UNIMPLEMENTED; /* FIXME */   
+}
+/****** mutex related functions ******/
+struct s_xbt_mutex_ {
+   
+   /* KEEP IT IN SYNC WITH src/simix/private.h::struct s_smx_mutex */
+   xbt_swag_t sleeping;                        /* list of sleeping process */
+   int using;
+   /* KEEP IT IN SYNC WITH src/simix/private.h::struct s_smx_mutex */
+   
+};
+
+xbt_mutex_t xbt_mutex_init(void) {
+   return (xbt_mutex_t)SIMIX_mutex_init();
+}
+
+void xbt_mutex_lock(xbt_mutex_t mutex) {
+   SIMIX_mutex_lock( (smx_mutex_t)mutex) ;
+}
+
+void xbt_mutex_unlock(xbt_mutex_t mutex) {
+   SIMIX_mutex_unlock( (smx_mutex_t)mutex );
+}
+
+void xbt_mutex_destroy(xbt_mutex_t mutex) {
+   SIMIX_mutex_destroy( (smx_mutex_t)mutex );
+}
+
+/***** condition related functions *****/
+struct s_xbt_cond_ {
+   
+   /* KEEP IT IN SYNC WITH src/simix/private.h::struct s_smx_cond */
+   xbt_swag_t sleeping;                        /* list of sleeping process */
+   smx_mutex_t  mutex;
+   xbt_fifo_t actions;                 /* list of actions */
+   /* KEEP IT IN SYNC WITH src/simix/private.h::struct s_smx_cond */
+
+};
+
+xbt_cond_t xbt_cond_init(void) {
+   return (xbt_cond_t)SIMIX_cond_init();
+}
+
+void xbt_cond_wait(xbt_cond_t cond, xbt_mutex_t mutex) {
+   SIMIX_cond_wait( (smx_cond_t)cond , (smx_mutex_t)mutex );
+}
+
+void xbt_cond_signal(xbt_cond_t cond) {
+   SIMIX_cond_signal( (smx_cond_t)cond );
+}
+        
+void xbt_cond_broadcast(xbt_cond_t cond){
+   SIMIX_cond_broadcast( (smx_cond_t)cond );
+}
+void xbt_cond_destroy(xbt_cond_t cond){
+   SIMIX_cond_destroy( (smx_cond_t)cond );
+}