| /* |
| * thread.h |
| * |
| * Copyright (c) 2012 Martin Szulecki All Rights Reserved. |
| * Copyright (c) 2012 Nikias Bassen All Rights Reserved. |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| */ |
| |
| #ifndef __THREAD_H |
| #define __THREAD_H |
| |
| #ifdef WIN32 |
| #include <windows.h> |
| typedef HANDLE thread_t; |
| typedef CRITICAL_SECTION mutex_t; |
| typedef volatile struct { |
| LONG lock; |
| int state; |
| } thread_once_t; |
| #define THREAD_ONCE_INIT {0, 0} |
| #define THREAD_ID GetCurrentThreadId() |
| #else |
| #include <pthread.h> |
| typedef pthread_t thread_t; |
| typedef pthread_mutex_t mutex_t; |
| typedef pthread_once_t thread_once_t; |
| #define THREAD_ONCE_INIT PTHREAD_ONCE_INIT |
| #define THREAD_ID pthread_self() |
| #endif |
| |
| typedef void* (*thread_func_t)(void* data); |
| |
| int thread_create(thread_t* thread, thread_func_t thread_func, void* data); |
| void thread_join(thread_t thread); |
| |
| void mutex_init(mutex_t* mutex); |
| void mutex_destroy(mutex_t* mutex); |
| void mutex_lock(mutex_t* mutex); |
| void mutex_unlock(mutex_t* mutex); |
| |
| void thread_once(thread_once_t *once_control, void (*init_routine)(void)); |
| |
| #endif |