X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e0365935e018f9d810dc0f4d17fbc8ef31ec18b0..863aeead864a309c494893a1b06ec33ed2b7daf1:/examples/msg/mc/bugged2_liveness.c diff --git a/examples/msg/mc/bugged2_liveness.c b/examples/msg/mc/bugged2_liveness.c index 7117b49b79..67e91ac89d 100644 --- a/examples/msg/mc/bugged2_liveness.c +++ b/examples/msg/mc/bugged2_liveness.c @@ -1,43 +1,39 @@ +/* Copyright (c) 2012-2015. 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. */ + /***************************** Bugged2 ****************************************/ /* This example implements a centralized mutual exclusion algorithm. */ /* One client stay always in critical section */ /* LTL property checked : !(GFcs) */ /******************************************************************************/ -#include "msg/msg.h" +#include "simgrid/msg.h" #include "mc/mc.h" -#include "xbt/automaton.h" #include "bugged2_liveness.h" XBT_LOG_NEW_DEFAULT_CATEGORY(bugged3, "my log messages"); - -int cs = 0; - -int predCS(){ - return cs; -} +int cs = 0; -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[]) { int CS_used = 0; // initially the CS is idle - + while (1) { 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) { + if (CS_used) { XBT_INFO("CS already used."); msg_task_t answer = MSG_task_create("not grant", 0, 1000, NULL); MSG_task_send(answer, req); - MC_compare(); - } else { // can serve it immediatly - XBT_INFO("CS idle. Grant immediatly"); + } 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; @@ -49,57 +45,47 @@ int coordinator(int argc, char *argv[]) MSG_task_destroy(task); kind = NULL; } - + 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()); char *my_mailbox = xbt_strdup(argv[1]); const char* kind; - - while(1){ + while(1){ XBT_INFO("Client (%s) asks the request", my_mailbox); - MSG_task_send(MSG_task_create("request", 0, 1000, my_mailbox), - "coordinator"); + MSG_task_send(MSG_task_create("request", 0, 1000, my_mailbox), "coordinator"); msg_task_t answer = NULL; MSG_task_receive(&answer, my_mailbox); kind = MSG_task_get_name(answer); - - if (!strcmp(kind, "grant")) { + if (!strcmp(kind, "grant")) { XBT_INFO("Client (%s) got the answer (grant). Sleep a bit and release it", my_mailbox); - if(!strcmp(my_mailbox, "1")) cs = 1; - }else{ - XBT_INFO("Client (%s) got the answer (not grant). Try again", my_mailbox); - } MSG_task_destroy(answer); kind = NULL; - + MSG_process_sleep(my_pid); } - return 0; } int main(int argc, char *argv[]) { - MSG_init(&argc, argv); - MSG_config("model-check/property","promela_bugged2_liveness"); - MC_automaton_new_propositional_symbol("cs", &predCS); - + MC_automaton_new_propositional_symbol_pointer("cs", &cs); + MSG_create_environment("../msg_platform.xml"); MSG_function_register("coordinator", coordinator); MSG_function_register("client", client);