/** The Dream master: */ static int dream_master(int argc, char *argv[]) { msg_process_t lazy = NULL; XBT_INFO("Let's create a lazy guy."); /** - Create a @ref lazy_guy process */ lazy = MSG_process_create("Lazy", lazy_guy, NULL, MSG_host_self()); XBT_INFO("Let's wait a little bit..."); SLEEP(10.0); /** - Wait for 10 seconds */ XBT_INFO("Let's wake the lazy guy up! >:) BOOOOOUUUHHH!!!!"); MSG_process_resume(lazy); /** - Then wake up the @ref lazy_guy */ SLEEP(5.0); /** Repeat two times: */ XBT_INFO("Suspend the lazy guy while he's sleeping..."); MSG_process_suspend(lazy); /** - Suspend the @ref lazy_guy while he's asleep */ XBT_INFO("Let him finish his siesta."); SLEEP(10.0); /** - Wait for 10 seconds */ XBT_INFO("Wake up, lazy guy!"); MSG_process_resume(lazy); /** - Then wake up the @ref lazy_guy again */ SLEEP(5.0); XBT_INFO("Suspend again the lazy guy while he's sleeping..."); MSG_process_suspend(lazy); XBT_INFO("This time, don't let him finish his siesta."); SLEEP(2.0); XBT_INFO("Wake up, lazy guy!"); MSG_process_resume(lazy); XBT_INFO("OK, goodbye now."); return 0; }
/** 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[]) { 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")); XBT_INFO("Yeah, found something to do"); task = MSG_task_create("job", 98095000, 0, NULL); MSG_task_execute(task); MSG_task_destroy(task); MSG_process_sleep(2); XBT_INFO("Moving back home after work"); 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()); 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 */
/** Victim. This process gets a lot of remote exceptions */ static int victim(int argc, char *argv[]) { xbt_ex_t e; msg_error_t res = MSG_OK; XBT_INFO("Let's work."); TRY { res = MSG_task_execute(MSG_task_create("Task", 1e14, 0, NULL)); if (res != MSG_OK) { XBT_INFO("The MSG_task_execute caught the exception for me and returned %d)",res); } else { xbt_die("I was expecting an exception during my execution!"); } } CATCH(e) { XBT_INFO("The received exception resumed my execution. Good. Here is it: ----------------------->8----"); xbt_ex_display(&e); XBT_INFO("(end of the first exception) ----8<------------------------"); xbt_ex_free(e); } XBT_INFO("Let's get suspended."); int gotit = 0; TRY { MSG_process_suspend(MSG_process_self()); } CATCH(e) { XBT_INFO("The received exception resumed my suspension. Good. Here is it: ----------------------->8----"); xbt_ex_display(&e); XBT_INFO("(end of the second exception) ----8<------------------------"); gotit = 1; xbt_ex_free(e); } if(!gotit) { xbt_die("I was expecting an exception during my suspension!"); } XBT_INFO("Let's sleep for 10 seconds."); TRY { res = MSG_process_sleep(10); if (res != MSG_OK) { XBT_INFO("The MSG_process_sleep caught the exception for me and returned %d)",res); } else { xbt_die("I was expecting to get an exception during my nap."); } } CATCH(e) { XBT_INFO("Got the second exception: ----------------------->8----"); xbt_ex_display(&e); XBT_INFO("(end of the third exception) ----8<------------------------"); xbt_ex_free(e); } XBT_INFO("Let's try a last time to do something on something"); MSG_process_sleep(10); XBT_INFO("That's enough now. I quit."); return 0; }
static int victim(int argc, char *argv[]) { XBT_INFO("Hello!"); XBT_INFO("Suspending myself"); MSG_process_suspend(MSG_process_self()); /* - First suspend itself */ XBT_INFO("OK, OK. Let's work"); /* - Then is resumed and start to execute a task */ MSG_task_execute(MSG_task_create("work", 1e9, 0, NULL)); XBT_INFO("Bye!"); /* - But will never reach the end of it */ return 0; }
/** The Lazy guy only wants to sleep, but can be awaken by the @ref dream_master. */ static int lazy_guy(int argc, char *argv[]) { XBT_INFO("Nobody's watching me ? Let's go to sleep."); MSG_process_suspend(MSG_process_self()); /** - Start by suspending itself */ XBT_INFO("Uuuh ? Did somebody call me ?"); XBT_INFO("Going to sleep..."); /** - Then repetitively go to sleep, but got awaken */ SLEEP(10.0); XBT_INFO("Mmm... waking up."); XBT_INFO("Going to sleep one more time..."); SLEEP(10.0); XBT_INFO("Waking up once for all!"); XBT_INFO("Mmmh, goodbye now."); return 0; }
JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_suspend(JNIEnv * env, jobject jprocess) { msg_process_t process = jprocess_to_native_process(jprocess, env); if (!process) { jxbt_throw_notbound(env, "process", jprocess); return; } /* try to suspend the process */ msg_error_t rv = MSG_process_suspend(process); jxbt_check_res("MSG_process_suspend()", rv, MSG_OK, bprintf("unexpected error , please report this bug")); }