X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/cc01c6a871dbbfd0cc84e26eb9f94aeb539e613e..611d822b02f836d7abe031cced6adc4281ef4356:/examples/msg/mc/centralized_mutex.c diff --git a/examples/msg/mc/centralized_mutex.c b/examples/msg/mc/centralized_mutex.c index 7b68acee9c..af7d67123d 100644 --- a/examples/msg/mc/centralized_mutex.c +++ b/examples/msg/mc/centralized_mutex.c @@ -1,59 +1,61 @@ +/* Copyright (c) 2010-2018. The SimGrid Team. + * All rights 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. */ + /***************** Centralized Mutual Exclusion Algorithm *********************/ /* This example implements a centralized mutual exclusion algorithm. */ /* There is no bug on it, it is just provided to test the state space */ /* reduction of DPOR. */ /******************************************************************************/ -#include "msg/msg.h" +#include "simgrid/msg.h" #define AMOUNT_OF_CLIENTS 4 #define CS_PER_PROCESS 2 XBT_LOG_NEW_DEFAULT_CATEGORY(centralized, "my log messages"); -int coordinator(int argc, char **argv); -int client(int argc, char **argv); - -int coordinator(int argc, char *argv[]) +static int coordinator(int argc, char *argv[]) { xbt_dynar_t requests = xbt_dynar_new(sizeof(char *), NULL); // dynamic vector storing requests (which are char*) int CS_used = 0; // initially the CS is idle int todo = AMOUNT_OF_CLIENTS * CS_PER_PROCESS; // amount of releases we are expecting while (todo > 0) { - m_task_t task = NULL; + msg_task_t task = NULL; MSG_task_receive(&task, "coordinator"); const char *kind = MSG_task_get_name(task); //is it a request or a release? if (!strcmp(kind, "request")) { // that's a request char *req = MSG_task_get_data(task); if (CS_used) { // need to push the request in the vector - INFO0("CS already used. Queue the request"); + XBT_INFO("CS already used. Queue the request"); xbt_dynar_push(requests, &req); - } else { // can serve it immediatly - INFO0("CS idle. Grant immediatly"); - m_task_t answer = MSG_task_create("grant", 0, 1000, NULL); + } else { // can serve it immediately + XBT_INFO("CS idle. Grant immediately"); + msg_task_t answer = MSG_task_create("grant", 0, 1000, NULL); MSG_task_send(answer, req); CS_used = 1; } } else { // that's a release. Check if someone was waiting for the lock - if (xbt_dynar_length(requests) > 0) { - INFO1("CS release. Grant to queued requests (queue size: %lu)", - xbt_dynar_length(requests)); + if (!xbt_dynar_is_empty(requests)) { + XBT_INFO("CS release. Grant to queued requests (queue size: %lu)", xbt_dynar_length(requests)); char *req; - xbt_dynar_pop(requests, &req); + xbt_dynar_shift(requests, &req); MSG_task_send(MSG_task_create("grant", 0, 1000, NULL), req); todo--; } else { // nobody wants it - INFO0("CS release. resource now idle"); + XBT_INFO("CS release. resource now idle"); CS_used = 0; todo--; } } MSG_task_destroy(task); } - INFO0("Received all releases, quit now"); + XBT_INFO("Received all releases, quit now"); return 0; } -int client(int argc, char *argv[]) +static int client(int argc, char *argv[]) { int my_pid = MSG_process_get_PID(MSG_process_self()); // use my pid as name of mailbox to contact me @@ -61,30 +63,28 @@ int client(int argc, char *argv[]) // request the CS 3 times, sleeping a bit in between int i; for (i = 0; i < CS_PER_PROCESS; i++) { - INFO0("Ask the request"); - MSG_task_send(MSG_task_create("request", 0, 1000, my_mailbox), - "coordinator"); + XBT_INFO("Ask the request"); + MSG_task_send(MSG_task_create("request", 0, 1000, my_mailbox), "coordinator"); // wait the answer - m_task_t grant = NULL; + msg_task_t grant = NULL; MSG_task_receive(&grant, my_mailbox); MSG_task_destroy(grant); - INFO0("got the answer. Sleep a bit and release it"); + XBT_INFO("got the answer. Sleep a bit and release it"); MSG_process_sleep(1); - MSG_task_send(MSG_task_create("release", 0, 1000, NULL), - "coordinator"); + MSG_task_send(MSG_task_create("release", 0, 1000, NULL), "coordinator"); MSG_process_sleep(my_pid); } - INFO0("Got all the CS I wanted, quit now"); + XBT_INFO("Got all the CS I wanted, quit now"); return 0; } int main(int argc, char *argv[]) { - MSG_global_init(&argc, argv); - MSG_create_environment("../msg_platform.xml"); + MSG_init(&argc, argv); + MSG_create_environment("../../platforms/small_platform.xml"); MSG_function_register("coordinator", coordinator); MSG_function_register("client", client); - MSG_launch_application("deploy_mutex.xml"); + MSG_launch_application("deploy_centralized_mutex.xml"); MSG_main(); return 0; }