/* xbt/xbt_os_thread.h -- Thread portability layer */
-/* Copyright (c) 2007-2012. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2007-2015. 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. */
/** \brief Thread data type (opaque structure) */
typedef struct xbt_os_thread_ *xbt_os_thread_t;
+
#ifdef _XBT_WIN32 /* defined if this is a windows system, 32bits or 64bits) */
-#include <WinDef.h>
+#include <windows.h>
typedef DWORD xbt_os_thread_key_t;
#else /* assume that every non-windows system is POSIX-compatible */
+
#include <pthread.h>
typedef pthread_key_t xbt_os_thread_key_t;
#endif
-/* Calls pthread_atfork() if present, and else does nothing.
- * The only known user of this wrapper is mmalloc_preinit(); This function may disapear in the near future.
+/** Calls pthread_atfork() if present, and raise an exception otherwise.
+ *
+ * The only known user of this wrapper is mmalloc_preinit(), but it is absolutely mandatory there:
+ * when used with tesh, mmalloc *must* be mutex protected and resistant to forks.
+ * This functionality is the only way to get it working (by ensuring that the mutex is consistently released on forks)
*/
XBT_PUBLIC(int) xbt_os_thread_atfork(void (*prepare)(void),
void (*parent)(void),
void *param,
void *data);
+//#define CORE_BINDING //Uncomment this to enable binding of threads to physical cores. Only Linux.
+#ifdef CORE_BINDING
+XBT_PUBLIC(int) xbt_os_thread_bind(xbt_os_thread_t thread, int cpu);
+#endif
+
XBT_PUBLIC(void) xbt_os_thread_exit(int *retcode);
XBT_PUBLIC(void) xbt_os_thread_detach(xbt_os_thread_t thread);
XBT_PUBLIC(xbt_os_thread_t) xbt_os_thread_self(void);
XBT_PUBLIC(void) xbt_os_thread_yield(void);
XBT_PUBLIC(void) xbt_os_thread_cancel(xbt_os_thread_t thread);
XBT_PUBLIC(void *) xbt_os_thread_getparam(void);
-
+XBT_PUBLIC(void) xbt_os_thread_setstacksize(int stack_size);
+XBT_PUBLIC(void) xbt_os_thread_setguardsize(int guard_size);
/** \brief Thread mutex data type (opaque structure) */
typedef struct xbt_os_mutex_ *xbt_os_mutex_t;