/* 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. */
-/** \file Rawcontext.cpp
+/** \file RawContext.cpp
* Fast context switching inspired from SystemV ucontexts.
*
* In contrast to System V context, it does not touch the signal mask
// ***** Loads of static stuff
-#ifdef CONTEXT_THREADS
+#ifdef HAVE_THREAD_CONTEXTS
static xbt_parmap_t raw_parmap;
static simgrid::simix::RawContext** raw_workers_context; /* space to save the worker context in each thread */
static unsigned long raw_threads_working; /* number of threads that have started their work */
/* If you implement raw contexts for other processors, don't forget to
- update the definition of HAVE_RAWCTX in tools/cmake/CompleteInFiles.cmake */
+ update the definition of HAVE_RAW_CONTEXTS in tools/cmake/CompleteInFiles.cmake */
raw_stack_t raw_makecontext(void* malloced_stack, int stack_size,
rawctx_entry_point_t entry_point, void* arg) {
#endif
raw_context_parallel = SIMIX_context_is_parallel();
if (raw_context_parallel) {
-#ifdef CONTEXT_THREADS
+#ifdef HAVE_THREAD_CONTEXTS
int nthreads = SIMIX_context_get_nthreads();
xbt_os_thread_key_create(&raw_worker_id_key);
// TODO, lazily init
RawContextFactory::~RawContextFactory()
{
-#ifdef CONTEXT_THREADS
+#ifdef HAVE_THREAD_CONTEXTS
if (raw_parmap)
xbt_parmap_destroy(raw_parmap);
xbt_free(raw_workers_context);
void RawContextFactory::run_all_parallel()
{
-#ifdef CONTEXT_THREADS
+#ifdef HAVE_THREAD_CONTEXTS
raw_threads_working = 0;
if (raw_parmap == nullptr)
raw_parmap = xbt_parmap_new(
void RawContext::suspend_parallel()
{
-#ifdef CONTEXT_THREADS
+#ifdef HAVE_THREAD_CONTEXTS
/* determine the next context */
smx_process_t next_work = (smx_process_t) xbt_parmap_next(raw_parmap);
RawContext* next_context = nullptr;
void RawContext::resume_parallel()
{
-#ifdef CONTEXT_THREADS
+#ifdef HAVE_THREAD_CONTEXTS
unsigned long worker_id = __sync_fetch_and_add(&raw_threads_working, 1);
xbt_os_thread_set_specific(raw_worker_id_key, (void*)(uintptr_t) worker_id);
RawContext* worker_context = (RawContext*) SIMIX_context_self();