/* ********************************* PTHREAD IMPLEMENTATION ************************************ */
#ifdef HAVE_PTHREAD_H
-#include <pthread.h>
#include <semaphore.h>
#ifdef HAVE_MUTEX_TIMEDLOCK
return res;
}
+void xbt_os_thread_key_create(xbt_os_thread_key_t* key) {
+
+ int errcode;
+ if ((errcode = pthread_key_create(key, NULL)))
+ THROWF(system_error, errcode, "pthread_key_create failed");
+}
+
+void xbt_os_thread_set_specific(xbt_os_thread_key_t key, void* value) {
+
+ int errcode;
+ if ((errcode = pthread_setspecific(key, value)))
+ THROWF(system_error, errcode, "pthread_setspecific failed");
+}
+
+void* xbt_os_thread_get_specific(xbt_os_thread_key_t key) {
+ return pthread_getspecific(key);
+}
+
void xbt_os_thread_detach(xbt_os_thread_t thread)
{
thread->detached = 1;
ExitThread(0);
}
+void xbt_os_thread_key_create(xbt_os_thread_key_t* key) {
+
+ *key = TlsAlloc();
+}
+
+void xbt_os_thread_set_specific(xbt_os_thread_key_t key, void* value) {
+
+ if (!TlsSetValue(key, value))
+ THROWF(system_error, (int) GetLastError(), "TlsSetValue() failed");
+}
+
+void* xbt_os_thread_get_specific(xbt_os_thread_key_t key) {
+ return TlsGetValue(key);
+}
+
void xbt_os_thread_detach(xbt_os_thread_t thread)
{
THROW_UNIMPLEMENTED;
xbt_os_rmutex_t xbt_os_rmutex_init(void)
{
- xbt_os_rmutex_t rmutex = xbt_new0(struct xbt_os_rmutex_, 0);
+ xbt_os_rmutex_t rmutex = xbt_new0(struct xbt_os_rmutex_, 1);
rmutex->mutex = xbt_os_mutex_init();
rmutex->owner = NULL;
rmutex->count = 0;