/* 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. */
/* 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. */
XBT_PUBLIC void simcall_run_object_access(std::function<void()> const& code,
simgrid::kernel::actor::ObjectAccessSimcallItem* item);
XBT_PUBLIC void simcall_run_object_access(std::function<void()> const& code,
simgrid::kernel::actor::ObjectAccessSimcallItem* item);
*
* Simulation without MC and without parallelism (contexts/nthreads=1) will not pay the price of a simcall for an
* harmless setter. When running in parallel, you want your write access to be done in a mutual exclusion way, while the
*
* Simulation without MC and without parallelism (contexts/nthreads=1) will not pay the price of a simcall for an
* harmless setter. When running in parallel, you want your write access to be done in a mutual exclusion way, while the
*
* When running in MC, you want to make this access visible to the checker. Actually in this case, it's not visible from
* the checker (and thus still use a fast track) if the setter is called from the actor that created the object.
*
* When running in MC, you want to make this access visible to the checker. Actually in this case, it's not visible from
* the checker (and thus still use a fast track) if the setter is called from the actor that created the object.
simcall_blocking(std::forward<F>(code), static_cast<SimcallObserver*>(observer));
return observer->get_result();
}
simcall_blocking(std::forward<F>(code), static_cast<SimcallObserver*>(observer));
return observer->get_result();
}