X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b65f44359644f1fdbe91077e7d379453a16f857a..57025160719eaf8b0c9912dbd0605d05f8b4f369:/examples/msg/migration/migration.c diff --git a/examples/msg/migration/migration.c b/examples/msg/migration/migration.c index 2fc714db07..95bd58c4ef 100644 --- a/examples/msg/migration/migration.c +++ b/examples/msg/migration/migration.c @@ -6,18 +6,28 @@ #include "msg/msg.h" /* core library */ #include "xbt/sysdep.h" /* calloc */ +#include "xbt/synchro_core.h" /* Create a log channel to have nice outputs. */ #include "xbt/log.h" XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, "Messages specific for this msg example"); -static m_process_t process_to_migrate = NULL; +/** @addtogroup MSG_examples + * + * - migration/migration.c Demonstrates how to use the @ref + * MSG_process_migrate function to let processes change the host they + * run on after their start. + */ + +xbt_mutex_t mutex = NULL; +xbt_cond_t cond = NULL; +static msg_process_t process_to_migrate = NULL; /** The guy we will move from host to host. It move alone and then is moved by policeman back */ static int emigrant(int argc, char *argv[]) { - m_task_t task; + msg_task_t task; XBT_INFO ("I'll look for a new job on another machine where the grass is greener."); MSG_process_migrate(MSG_process_self(), MSG_get_host_by_name("Boivin")); @@ -31,10 +41,13 @@ static int emigrant(int argc, char *argv[]) MSG_process_migrate(MSG_process_self(), MSG_get_host_by_name("Jacquelin")); MSG_process_migrate(MSG_process_self(), MSG_get_host_by_name("Boivin")); MSG_process_sleep(4); + xbt_mutex_acquire(mutex); process_to_migrate = MSG_process_self(); + xbt_cond_broadcast(cond); + xbt_mutex_release(mutex); MSG_process_suspend(MSG_process_self()); - m_host_t h = MSG_process_get_host(MSG_process_self()); - XBT_INFO("I've been moved on this new host: %s", h->name); + msg_host_t h = MSG_process_get_host(MSG_process_self()); + XBT_INFO("I've been moved on this new host: %s", MSG_host_get_name(h)); XBT_INFO("Uh, nothing to do here. Stopping now"); return 0; } /* end_of_emigrant */ @@ -43,11 +56,15 @@ static int emigrant(int argc, char *argv[]) /* This function move the emigrant on Jacquelin */ static int policeman(int argc, char *argv[]) { + + xbt_mutex_acquire(mutex); XBT_INFO("Wait a bit before migrating the emigrant."); - while (process_to_migrate == NULL) MSG_process_sleep(1); + while (process_to_migrate == NULL) xbt_cond_wait(cond, mutex); MSG_process_migrate(process_to_migrate, MSG_get_host_by_name("Jacquelin")); XBT_INFO("I moved the emigrant"); MSG_process_resume(process_to_migrate); + xbt_mutex_release(mutex); + return 0; } /* end_of_policeman */ @@ -55,10 +72,10 @@ static int policeman(int argc, char *argv[]) /** Main function */ int main(int argc, char *argv[]) { - MSG_error_t res = MSG_OK; + msg_error_t res = MSG_OK; /* Argument checking */ - MSG_global_init(&argc, argv); + MSG_init(&argc, argv); if (argc < 3) { XBT_CRITICAL("Usage: %s platform_file deployment_file\n", argv[0]); XBT_CRITICAL("example: %s msg_platform.xml msg_deployment_suspend.xml\n", @@ -75,10 +92,12 @@ int main(int argc, char *argv[]) MSG_launch_application(argv[2]); /* Run the simulation */ + mutex = xbt_mutex_init(); + cond = xbt_cond_init(); res = MSG_main(); XBT_INFO("Simulation time %g", MSG_get_clock()); - if (res == MSG_OK) - res = MSG_clean(); + xbt_cond_destroy(cond); + xbt_mutex_destroy(mutex); if (res == MSG_OK) return 0;