gwion-util
utilities for the Gwion project
Loading...
Searching...
No Matches
include
gwion_thread.h
Go to the documentation of this file.
1
4
#pragma once
5
#ifdef BUILD_ON_WINDOWS
6
#include <windows.h>
7
#define THREAD_RETTYPE long unsigned int
8
#define THREAD_FUNC(a) THREAD_RETTYPE(a)(void *data)
9
#define THREAD_TYPE HANDLE
10
#define THREAD_CREATE(thread, func, arg) \
11
thread = CreateThread(NULL, 0, func, arg, 0, NULL)
12
#define THREAD_JOIN(thread) WaitForSingleObject(thread, 0)
13
#define THREAD_RETURN(arg) return 0;
14
#define THREAD_DETACH(arg)
15
16
#define MUTEX_TYPE HANDLE
17
#define MUTEX_INITIALIZER NULL
18
#define MUTEX_SETUP(x) (x) = CreateMutex(NULL, FALSE, NULL)
19
#define MUTEX_CLEANUP(x) CloseHandle(x)
20
#define MUTEX_LOCK(x) emulate_pthread_mutex_lock(&(x))
21
#define MUTEX_COND_LOCK(x)
22
//#define MUTEX_UNLOCK(x) (ReleaseMutex((x)) == 0)
23
#define MUTEX_UNLOCK(x) ReleaseMutex((x))
24
#define MUTEX_COND_UNLOCK(x) (void)x
25
int
emulate_pthread_mutex_lock(
volatile
MUTEX_TYPE
*mx);
26
27
#define THREAD_COND_TYPE HANDLE
28
#define THREAD_COND_SETUP(x) x = CreateEvent(NULL, FALSE, FALSE, NULL);
29
#define THREAD_COND_WAIT(x, mutex) WaitForSingleObject(x, INFINITE)
30
#define THREAD_COND_SIGNAL(x) SetEvent(x);
31
#define THREAD_COND_BROADCAST(x) SetEvent(x);
32
#define THREAD_COND_CLEANUP(x) CloseHandle(x)
33
#else
34
#include <pthread.h>
35
36
#define THREAD_RETTYPE void *
37
#define THREAD_FUNC(a) THREAD_RETTYPE(a)(void *data)
38
#define THREAD_TYPE pthread_t
39
#define THREAD_CREATE(thread, func, arg) \
40
pthread_create(&thread, NULL, func, arg)
41
#define THREAD_JOIN(thread) pthread_join(thread, NULL)
42
#define THREAD_RETURN(arg) \
43
{ \
44
pthread_exit(NULL); \
45
return NULL; \
46
}
47
#define THREAD_DETACH(arg) pthread_detach(arg)
48
49
#define MUTEX_TYPE pthread_mutex_t *
50
#define MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
51
#define MUTEX_SETUP(x) \
52
{ \
53
pthread_mutexattr_t attr; \
54
pthread_mutexattr_init(&attr); \
55
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); \
56
x = (pthread_mutex_t *)xmalloc(sizeof(pthread_mutex_t)); \
57
pthread_mutex_init(x, &attr); \
58
}
59
#define MUTEX_CLEANUP(x) \
60
{ \
61
pthread_mutex_destroy((x)); \
62
xfree(x); \
63
}
64
#define MUTEX_LOCK(x) pthread_mutex_lock((x))
65
#define MUTEX_COND_LOCK(x) pthread_mutex_lock((x))
66
#define MUTEX_UNLOCK(x) pthread_mutex_unlock((x))
67
#define MUTEX_COND_UNLOCK(x) pthread_mutex_unlock((x))
68
69
#define THREAD_COND_TYPE pthread_cond_t*
70
#define THREAD_COND_SETUP(x) \
71
{ \
72
x = (pthread_cond_t *)xcalloc(1, sizeof(pthread_cond_t)); \
73
pthread_cond_init(x, NULL); \
74
}
75
#define THREAD_COND_WAIT(x, mutex) pthread_cond_wait(x, mutex)
76
#define THREAD_COND_SIGNAL(x) pthread_cond_signal(x)
77
#define THREAD_COND_BROADCAST(x) pthread_cond_broadcast(x)
78
#define THREAD_COND_CLEANUP(x) \
79
{ \
80
pthread_cond_destroy(x); \
81
xfree(x); \
82
}
83
84
#endif
85
86
#define STR_EXPAND(tok) #tok
87
#define STR(tok) STR_EXPAND(tok)
88
#ifndef BUILD_ON_WINDOWS
89
#include <dlfcn.h>
90
#define DLOPEN(dl, b) dlopen(dl, b)
91
#define DLSYM(dl, t, a) (t)(intptr_t) dlsym(dl, a)
92
#define DLCLOSE(dl) dlclose(dl)
93
#define DLERROR() dlerror()
94
#else
95
#include "windows.h"
96
#define DLOPEN(dl, b) LoadLibrary(dl)
97
#define DLSYM(dl, t, a) (t)(intptr_t) GetProcAddress(dl, a)
98
#define DLCLOSE(dl) FreeLibrary(dl)
99
#define DLERROR() "plugin"
100
#endif
MUTEX_TYPE
#define MUTEX_TYPE
Definition
gwion_thread.h:49
Generated by
1.13.2