From: Martin Quinson Date: Sat, 5 Jan 2019 02:18:25 +0000 (+0100) Subject: reimplement this test in cpp to use standard threads X-Git-Tag: v3_22~680 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/a20fccefc5d8bce0dfc91b6652272fa93f12b673 reimplement this test in cpp to use standard threads --- diff --git a/teshsuite/xbt/CMakeLists.txt b/teshsuite/xbt/CMakeLists.txt index e59f3459c4..0422f259f7 100644 --- a/teshsuite/xbt/CMakeLists.txt +++ b/teshsuite/xbt/CMakeLists.txt @@ -1,4 +1,4 @@ -foreach(x cmdline log_large log_usage mallocator parallel_log_crashtest) +foreach(x cmdline log_large log_usage mallocator) add_executable (${x} ${x}/${x}.c) target_link_libraries(${x} simgrid) set_target_properties(${x} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${x}) @@ -7,7 +7,7 @@ foreach(x cmdline log_large log_usage mallocator parallel_log_crashtest) set(teshsuite_src ${teshsuite_src} ${CMAKE_CURRENT_SOURCE_DIR}/${x}/${x}.c) endforeach() -foreach(x parmap_bench parmap_test) +foreach(x parallel_log_crashtest parmap_bench parmap_test) add_executable (${x} ${x}/${x}.cpp) target_link_libraries(${x} simgrid) set_target_properties(${x} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${x}) diff --git a/teshsuite/xbt/parallel_log_crashtest/parallel_log_crashtest.c b/teshsuite/xbt/parallel_log_crashtest/parallel_log_crashtest.c deleted file mode 100644 index b2962c1294..0000000000 --- a/teshsuite/xbt/parallel_log_crashtest/parallel_log_crashtest.c +++ /dev/null @@ -1,62 +0,0 @@ -/* synchro_crashtest -- tries to crash the logging mechanism by doing parallel logs*/ - -/* Copyright (c) 2007-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. */ - -#include "simgrid/msg.h" -#include "xbt.h" - -#include /* snprintf */ - -XBT_LOG_NEW_DEFAULT_CATEGORY(synchro_crashtest, "Logs of this example"); - -const int test_amount = 99; /* Up to 99 to not break the logs (and thus the testing mechanism) */ -const int crasher_amount = 99; /* Up to 99 to not break the logs (and thus the testing mechanism) */ -int *id; /* to pass a pointer to the threads without race condition */ - -int more_info = 0; /* SET IT TO TRUE TO GET MORE INFO */ - -/* Code ran by each thread */ -static void* crasher_thread(void *arg) -{ - int id = *(int *) arg; - - for (int i = 0; i < test_amount; i++) { - if (more_info) - XBT_INFO("%03d (%02d|%02d|%02d|%02d|%02d|%02d|%02d|%02d|%02d)", - test_amount - i, id, id, id, id, id, id, id, id, id); - else - XBT_INFO("XXX (XX|XX|XX|XX|XX|XX|XX|XX|XX)"); - } - return NULL; -} - -static int crasher() -{ - /* initializations of the philosopher mechanisms */ - id = xbt_new0(int, crasher_amount); - xbt_os_thread_t* crashers = xbt_new(xbt_os_thread_t, crasher_amount); - - /* spawn threads */ - for (int i = 0; i < crasher_amount; i++) { - id[i] = i; - crashers[i] = xbt_os_thread_create(&crasher_thread, &id[i]); - } - - /* wait for them */ - for (int i = 0; i < crasher_amount; i++) - xbt_os_thread_join(crashers[i],NULL); - - xbt_free(crashers); - xbt_free(id); - - return 0; -} - -int main(int argc, char *argv[]) -{ - MSG_init(&argc, argv); - return crasher(); -} diff --git a/teshsuite/xbt/parallel_log_crashtest/parallel_log_crashtest.cpp b/teshsuite/xbt/parallel_log_crashtest/parallel_log_crashtest.cpp new file mode 100644 index 0000000000..0464f2676c --- /dev/null +++ b/teshsuite/xbt/parallel_log_crashtest/parallel_log_crashtest.cpp @@ -0,0 +1,51 @@ +/* synchro_crashtest -- tries to crash the logging mechanism by doing parallel logs*/ + +/* Copyright (c) 2007-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. */ + +#include "simgrid/msg.h" +#include + +XBT_LOG_NEW_DEFAULT_CATEGORY(synchro_crashtest, "Logs of this example"); + +const int test_amount = 99; /* Up to 99 to not break the logs (and thus the testing mechanism) */ +const int crasher_amount = 99; /* Up to 99 to not break the logs (and thus the testing mechanism) */ + +int more_info = 0; /* SET IT TO TRUE TO GET MORE INFO */ + +/* Code ran by each thread */ +static void* crasher_thread(void* arg) +{ + int id = *(int*)arg; + + for (int i = 0; i < test_amount; i++) { + if (more_info) + XBT_INFO("%03d (%02d|%02d|%02d|%02d|%02d|%02d|%02d|%02d|%02d)", test_amount - i, id, id, id, id, id, id, id, id, + id); + else + XBT_INFO("XXX (XX|XX|XX|XX|XX|XX|XX|XX|XX)"); + } + return NULL; +} + +int main(int argc, char* argv[]) +{ + MSG_init(&argc, argv); + + int id[crasher_amount]; + std::thread crashers[crasher_amount]; + + /* spawn threads */ + for (int i = 0; i < crasher_amount; i++) { + id[i] = i; + crashers[i] = std::thread(crasher_thread, &id[i]); + } + + /* wait for them */ + for (int i = 0; i < crasher_amount; i++) + crashers[i].join(); + + return 0; +}