]>
git.ipfire.org Git - thirdparty/cups.git/blob - cups/thread.c
4 * Threading primitives for CUPS.
6 * Copyright 2009-2012 by Apple Inc.
8 * These coded instructions, statements, and computer programs are the
9 * property of Apple Inc. and are protected by Federal copyright
10 * law. Distribution and use rights are outlined in the file "LICENSE.txt"
11 * which should have been included with this file. If this file is
12 * file is missing or damaged, see the license at "http://www.cups.org/".
16 * _cupsMutexInit() - Initialize a mutex.
17 * _cupsMutexLock() - Lock a mutex.
18 * _cupsMutexUnlock() - Unlock a mutex.
19 * _cupsRWInit() - Initialize a reader/writer lock.
20 * _cupsRWLockRead() - Acquire a reader/writer lock for reading.
21 * _cupsRWLockWrite() - Acquire a reader/writer lock for writing.
22 * _cupsRWUnlock() - Release a reader/writer lock.
23 * _cupsThreadCreate() - Create a thread.
27 * Include necessary headers...
30 #include "cups-private.h"
31 #include "thread-private.h"
34 #if defined(HAVE_PTHREAD_H)
36 * '_cupsMutexInit()' - Initialize a mutex.
40 _cupsMutexInit(_cups_mutex_t
*mutex
) /* I - Mutex */
42 pthread_mutex_init(mutex
, NULL
);
47 * '_cupsMutexLock()' - Lock a mutex.
51 _cupsMutexLock(_cups_mutex_t
*mutex
) /* I - Mutex */
53 pthread_mutex_lock(mutex
);
58 * '_cupsMutexUnlock()' - Unlock a mutex.
62 _cupsMutexUnlock(_cups_mutex_t
*mutex
) /* I - Mutex */
64 pthread_mutex_unlock(mutex
);
69 * '_cupsRWInit()' - Initialize a reader/writer lock.
73 _cupsRWInit(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
75 pthread_rwlock_init(rwlock
, NULL
);
80 * '_cupsRWLockRead()' - Acquire a reader/writer lock for reading.
84 _cupsRWLockRead(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
86 pthread_rwlock_rdlock(rwlock
);
91 * '_cupsRWLockWrite()' - Acquire a reader/writer lock for writing.
95 _cupsRWLockWrite(_cups_rwlock_t
*rwlock
)/* I - Reader/writer lock */
97 pthread_rwlock_wrlock(rwlock
);
102 * '_cupsRWUnlock()' - Release a reader/writer lock.
106 _cupsRWUnlock(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
108 pthread_rwlock_unlock(rwlock
);
113 * '_cupsThreadCreate()' - Create a thread.
116 int /* O - 0 on failure, 1 on success */
118 _cups_thread_func_t func
, /* I - Entry point */
119 void *arg
) /* I - Entry point context */
123 return (pthread_create(&thread
, NULL
, (void *(*)(void *))func
, arg
) == 0);
128 # include <process.h>
132 * '_cupsMutexInit()' - Initialize a mutex.
136 _cupsMutexInit(_cups_mutex_t
*mutex
) /* I - Mutex */
138 InitializeCriticalSection(&mutex
->m_criticalSection
);
144 * '_cupsMutexLock()' - Lock a mutex.
148 _cupsMutexLock(_cups_mutex_t
*mutex
) /* I - Mutex */
156 InitializeCriticalSection(&mutex
->m_criticalSection
);
163 EnterCriticalSection(&mutex
->m_criticalSection
);
168 * '_cupsMutexUnlock()' - Unlock a mutex.
172 _cupsMutexUnlock(_cups_mutex_t
*mutex
) /* I - Mutex */
174 LeaveCriticalSection(&mutex
->m_criticalSection
);
179 * '_cupsRWInit()' - Initialize a reader/writer lock.
183 _cupsRWInit(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
185 _cupsMutexInit((_cups_mutex_t
*)rwlock
);
190 * '_cupsRWLockRead()' - Acquire a reader/writer lock for reading.
194 _cupsRWLockRead(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
196 _cupsMutexLock((_cups_mutex_t
*)rwlock
);
201 * '_cupsRWLockWrite()' - Acquire a reader/writer lock for writing.
205 _cupsRWLockWrite(_cups_rwlock_t
*rwlock
)/* I - Reader/writer lock */
207 _cupsMutexLock((_cups_mutex_t
*)rwlock
);
212 * '_cupsRWUnlock()' - Release a reader/writer lock.
216 _cupsRWUnlock(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
218 _cupsMutexUnlock((_cups_mutex_t
*)rwlock
);
223 * '_cupsThreadCreate()' - Create a thread.
226 int /* O - 0 on failure, 1 on success */
228 _cups_thread_func_t func
, /* I - Entry point */
229 void *arg
) /* I - Entry point context */
231 return (_beginthreadex(NULL
, 0, (LPTHREAD_START_ROUTINE
) func
, arg
, 0, NULL
)
238 * '_cupsMutexInit()' - Initialize a mutex.
242 _cupsMutexInit(_cups_mutex_t
*mutex
) /* I - Mutex */
249 * '_cupsMutexLock()' - Lock a mutex.
253 _cupsMutexLock(_cups_mutex_t
*mutex
) /* I - Mutex */
260 * '_cupsMutexUnlock()' - Unlock a mutex.
264 _cupsMutexUnlock(_cups_mutex_t
*mutex
) /* I - Mutex */
271 * '_cupsRWInit()' - Initialize a reader/writer lock.
275 _cupsRWInit(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
282 * '_cupsRWLockRead()' - Acquire a reader/writer lock for reading.
286 _cupsRWLockRead(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
293 * '_cupsRWLockWrite()' - Acquire a reader/writer lock for writing.
297 _cupsRWLockWrite(_cups_rwlock_t
*rwlock
)/* I - Reader/writer lock */
304 * '_cupsRWUnlock()' - Release a reader/writer lock.
308 _cupsRWUnlock(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
315 * '_cupsThreadCreate()' - Create a thread.
318 int /* O - 0 on failure, 1 on success */
320 _cups_thread_func_t func
, /* I - Entry point */
321 void *arg
) /* I - Entry point context */
323 fputs("DEBUG: CUPS was compiled without threading support, no thread "
324 "created.\n", stderr
);
331 #endif /* HAVE_PTHREAD_H */