Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[xbt] Add unit test got xbt_dict with arbitrary (not a NULL temrinated string) key
[simgrid.git] / src / xbt / xbt_os_thread.c
index ed0a8ac..b97d90e 100644 (file)
@@ -26,6 +26,11 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_sync_os, xbt,
 #include <limits.h>
 #include <semaphore.h>
 
+#ifdef CORE_BINDING
+#define _GNU_SOURCE
+#include <sched.h>
+#endif
+
 #ifdef HAVE_MUTEX_TIMEDLOCK
 /* redefine the function header since we fail to get this from system headers on amd (at least) */
 int pthread_mutex_timedlock(pthread_mutex_t * mutex,
@@ -193,6 +198,18 @@ xbt_os_thread_t xbt_os_thread_create(const char *name,
 }
 
 
+#ifdef CORE_BINDING
+int xbt_os_thread_bind(xbt_os_thread_t thread, int cpu){
+  pthread_t pthread = thread->t;
+  int errcode = 0;
+  cpu_set_t cpuset;
+  CPU_ZERO(&cpuset);
+  CPU_SET(cpu, &cpuset);
+  errcode = pthread_setaffinity_np(pthread, sizeof(cpu_set_t), &cpuset);
+  return errcode;
+}
+#endif
+
 void xbt_os_thread_setstacksize(int stack_size)
 {
   size_t alignment[] = {
@@ -230,6 +247,18 @@ void xbt_os_thread_setstacksize(int stack_size)
     XBT_WARN("unknown error %d in pthread stacksize setting: %zd", res, sz);
 }
 
+void xbt_os_thread_setguardsize(int guard_size)
+{
+#ifdef WIN32
+  THROW_UNIMPLEMENTED; //pthread_attr_setguardsize is not implemented in pthread.h on windows
+#else
+  size_t sz = guard_size;
+  int res = pthread_attr_setguardsize(&thread_attr, sz);
+  if (res)
+    XBT_WARN("pthread_attr_setguardsize failed (%d) for size: %zd", res, sz);
+#endif
+}
+
 const char *xbt_os_thread_name(xbt_os_thread_t t)
 {
   return t->name;
@@ -758,6 +787,11 @@ void xbt_os_thread_setstacksize(int size)
   stack_size = size;
 }
 
+void xbt_os_thread_setguardsize(int size)
+{
+  XBT_WARN("xbt_os_thread_setguardsize is not implemented (%d)", size);
+}
+
 const char *xbt_os_thread_name(xbt_os_thread_t t)
 {
   return t->name;