/** @brief Thread data type (opaque structure) */
typedef struct xbt_os_thread_ *xbt_os_thread_t;
-XBT_PUBLIC xbt_os_thread_t xbt_os_thread_create(const char* name, pvoid_f_pvoid_t start_routine, void* param,
- void* data);
+XBT_PUBLIC xbt_os_thread_t xbt_os_thread_create(const char* name, pvoid_f_pvoid_t start_routine, void* param);
XBT_PUBLIC void xbt_os_thread_exit(int* retcode);
XBT_PUBLIC xbt_os_thread_t xbt_os_thread_self(void);
XBT_PUBLIC const char* xbt_os_thread_self_name(void);
-XBT_PUBLIC void xbt_os_thread_set_extra_data(void* data);
-XBT_PUBLIC void* xbt_os_thread_get_extra_data(void);
/* xbt_os_thread_join frees the joined thread (ie the XBT wrapper around it, the OS frees the rest) */
XBT_PUBLIC void xbt_os_thread_join(xbt_os_thread_t thread, void** thread_return);
XBT_PUBLIC void xbt_os_thread_setstacksize(int stack_size);
unsigned int core_bind = 0;
for (unsigned i = 1; i < num_workers; i++) {
ThreadData* data = new ThreadData(*this, i);
- this->workers[i] = xbt_os_thread_create(nullptr, worker_main, data, nullptr);
+ this->workers[i] = xbt_os_thread_create(nullptr, worker_main, data);
xbt_os_thread_bind(this->workers[i], core_bind);
if (core_bind != std::thread::hardware_concurrency() - 1)
core_bind++;
/* create and start the process */
/* NOTE: The first argument to xbt_os_thread_create used to be the process *
* name, but now the name is stored at SIMIX level, so we pass a null */
- this->thread_ = xbt_os_thread_create(nullptr, ThreadContext::wrapper, this, this);
+ this->thread_ = xbt_os_thread_create(nullptr, ThreadContext::wrapper, this);
/* wait the starting of the newly created process */
this->end_.acquire();
}
char *name;
void *param;
pvoid_f_pvoid_t start_routine;
- void *extra_data;
} s_xbt_os_thread_t;
static xbt_os_thread_t main_thread = NULL;
main_thread->name = xbt_strdup("main");
main_thread->param = NULL;
main_thread->start_routine = NULL;
- main_thread->extra_data = NULL;
if ((errcode = pthread_setspecific(xbt_self_thread_key, main_thread)))
THROWF(system_error, errcode,
return t->start_routine(t->param);
}
-xbt_os_thread_t xbt_os_thread_create(const char *name, pvoid_f_pvoid_t start_routine, void *param, void *extra_data)
+xbt_os_thread_t xbt_os_thread_create(const char* name, pvoid_f_pvoid_t start_routine, void* param)
{
xbt_os_thread_t res_thread = xbt_new(s_xbt_os_thread_t, 1);
res_thread->name = xbt_strdup(name);
res_thread->start_routine = start_routine;
res_thread->param = param;
- res_thread->extra_data = extra_data;
int errcode = pthread_create(&(res_thread->t), &thread_attr, wrapper_start_routine, res_thread);
xbt_assert(errcode == 0, "pthread_create failed: %s", strerror(errcode));
xbt_assert(errcode == 0, "pthread_mutex_destroy(%p) failed: %s", mutex, strerror(errcode));
free(mutex);
}
-
-void xbt_os_thread_set_extra_data(void *data)
-{
- xbt_os_thread_self()->extra_data = data;
-}
-
-void *xbt_os_thread_get_extra_data(void)
-{
- xbt_os_thread_t thread = xbt_os_thread_self();
- return thread ? thread->extra_data : NULL;
-}
for (int i = 0; i < crasher_amount; i++) {
char name[16];
snprintf(name, sizeof name, "thread %d", i);
- crashers[i] = xbt_os_thread_create(name, &crasher_thread, &id[i], NULL );
+ crashers[i] = xbt_os_thread_create(name, &crasher_thread, &id[i]);
}
/* wait for them */