108
typedef uint32_t ThreadIdentifier;
109
typedef void* (*ThreadFunction)(void* argument);
111
// Returns 0 if thread creation failed.
112
// The thread name must be a literal since on some platforms it's passed in to the thread.
113
ThreadIdentifier createThread(ThreadFunction, void*, const char* threadName);
115
// Internal platform-specific createThread implementation.
116
ThreadIdentifier createThreadInternal(ThreadFunction, void*, const char* threadName);
118
// Called in the thread during initialization.
119
// Helpful for platforms where the thread name must be set from within the thread.
120
void setThreadNameInternal(const char* threadName);
122
ThreadIdentifier currentThread();
124
int waitForThreadCompletion(ThreadIdentifier, void**);
125
void detachThread(ThreadIdentifier);
127
110
#if USE(PTHREADS)
128
111
typedef pthread_mutex_t PlatformMutex;
129
112
typedef pthread_cond_t PlatformCondition;
113
typedef pthread_t PlatformThreadIdentifier;
130
114
#elif PLATFORM(GTK)
131
115
typedef GOwnPtr<GMutex> PlatformMutex;
132
116
typedef GOwnPtr<GCond> PlatformCondition;
117
typedef GThread* PlatformThreadIdentifier;
133
118
#elif PLATFORM(QT)
134
119
typedef QT_PREPEND_NAMESPACE(QMutex)* PlatformMutex;
135
120
typedef QT_PREPEND_NAMESPACE(QWaitCondition)* PlatformCondition;
121
typedef QT_PREPEND_NAMESPACE(QThread)* PlatformThreadIdentifier;
136
122
#elif PLATFORM(WIN_OS)
137
123
struct PlatformMutex {
138
124
CRITICAL_SECTION m_internalMutex;
149
135
bool timedWait(PlatformMutex&, DWORD durationMilliseconds);
150
136
void signal(bool unblockAll);
138
typedef unsigned PlatformThreadIdentifier;
153
140
typedef void* PlatformMutex;
154
141
typedef void* PlatformCondition;
144
// Platform-independent wrapper for thread id. Assignable and copyable.
145
// A valid ThreadIdentifier is usually returned from createThread(...) or currentThread() functions.
146
// ThreadIdentifier remains valid for as long as its thread is alive and is not automatically invalidated
147
// when thread terminates. Since platform-dependent thread ids can be recycled, stale ThreadIdentifier
148
// may reference a completely unrelated thread after its original thread terminates.
149
class ThreadIdentifier {
157
explicit ThreadIdentifier(PlatformThreadIdentifier platformId)
158
: m_platformId(platformId)
163
bool isValid() const { return m_platformId; }
164
void invalidate() { m_platformId = 0; }
166
bool operator==(const ThreadIdentifier&) const;
167
bool operator!=(const ThreadIdentifier&) const;
169
PlatformThreadIdentifier platformId() const { return m_platformId; }
172
PlatformThreadIdentifier m_platformId;
175
typedef void* (*ThreadFunction)(void* argument);
177
// Returns invalid identifier if thread creation failed.
178
// The thread name must be a literal since on some platforms it's passed in to the thread.
179
ThreadIdentifier createThread(ThreadFunction, void*, const char* threadName);
181
// Internal platform-specific createThread implementation.
182
ThreadIdentifier createThreadInternal(ThreadFunction, void*, const char* threadName);
184
// Called in the thread during initialization.
185
// Helpful for platforms where the thread name must be set from within the thread.
186
void setThreadNameInternal(const char* threadName);
188
ThreadIdentifier currentThread();
190
int waitForThreadCompletion(ThreadIdentifier, void**);
191
void detachThread(ThreadIdentifier);
157
193
class Mutex : Noncopyable {