-int SIMIX_context_select_factory(const char *name)
-{
- /* if a context factory is already instantiated and it is different from the
- newly selected one, then kill all the processes, exit the context module
- and initialize the new factory.
- */
-
-
- if (simix_global->context_factory != NULL) {
- if (strcmp(simix_global->context_factory->name, name)){
-
- SIMIX_process_killall();
-
- /* kill maestro process */
- SIMIX_context_free(simix_global->maestro_process->context);
- free(simix_global->maestro_process);
- simix_global->maestro_process = NULL;
-
- SIMIX_context_mod_exit();
- }
- else
- /* the same context factory is requested return directly */
- return 0;
+XBT_INLINE int SIMIX_context_is_parallel(void) {
+ return smx_parallel_contexts > 1;
+}
+
+/**
+ * \brief Returns the number of parallel threads used
+ * for the user contexts.
+ * \return the number of threads (1 means no parallelism)
+ */
+XBT_INLINE int SIMIX_context_get_nthreads(void) {
+ return smx_parallel_contexts;
+}
+
+/**
+ * \brief Sets the number of parallel threads to use
+ * for the user contexts.
+ *
+ * This function should be called before initializing SIMIX.
+ * A value of 1 means no parallelism (1 thread only).
+ * If the value is greater than 1, the thread support must be enabled.
+ *
+ * \param nb_threads the number of threads to use
+ */
+XBT_INLINE void SIMIX_context_set_nthreads(int nb_threads) {
+
+ if (nb_threads<=0) {
+ nb_threads = xbt_os_get_numcores();
+ XBT_INFO("Auto-setting contexts/nthreads to %d",nb_threads);
+ }
+
+ if (nb_threads > 1) {
+#ifndef CONTEXT_THREADS
+ THROWF(arg_error, 0, "The thread factory cannot be run in parallel");
+#endif