]>
git.ipfire.org Git - thirdparty/cups.git/blob - cups/thread.c
2 * "$Id: thread.c 11642 2014-02-27 15:57:59Z msweet $"
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/".
14 * This file is subject to the Apple OS-Developed Software exception.
18 * _cupsMutexInit() - Initialize a mutex.
19 * _cupsMutexLock() - Lock a mutex.
20 * _cupsMutexUnlock() - Unlock a mutex.
21 * _cupsRWInit() - Initialize a reader/writer lock.
22 * _cupsRWLockRead() - Acquire a reader/writer lock for reading.
23 * _cupsRWLockWrite() - Acquire a reader/writer lock for writing.
24 * _cupsRWUnlock() - Release a reader/writer lock.
25 * _cupsThreadCreate() - Create a thread.
29 * Include necessary headers...
32 #include "cups-private.h"
33 #include "thread-private.h"
36 #if defined(HAVE_PTHREAD_H)
38 * '_cupsMutexInit()' - Initialize a mutex.
42 _cupsMutexInit(_cups_mutex_t
*mutex
) /* I - Mutex */
44 pthread_mutex_init(mutex
, NULL
);
49 * '_cupsMutexLock()' - Lock a mutex.
53 _cupsMutexLock(_cups_mutex_t
*mutex
) /* I - Mutex */
55 pthread_mutex_lock(mutex
);
60 * '_cupsMutexUnlock()' - Unlock a mutex.
64 _cupsMutexUnlock(_cups_mutex_t
*mutex
) /* I - Mutex */
66 pthread_mutex_unlock(mutex
);
71 * '_cupsRWInit()' - Initialize a reader/writer lock.
75 _cupsRWInit(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
77 pthread_rwlock_init(rwlock
, NULL
);
82 * '_cupsRWLockRead()' - Acquire a reader/writer lock for reading.
86 _cupsRWLockRead(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
88 pthread_rwlock_rdlock(rwlock
);
93 * '_cupsRWLockWrite()' - Acquire a reader/writer lock for writing.
97 _cupsRWLockWrite(_cups_rwlock_t
*rwlock
)/* I - Reader/writer lock */
99 pthread_rwlock_wrlock(rwlock
);
104 * '_cupsRWUnlock()' - Release a reader/writer lock.
108 _cupsRWUnlock(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
110 pthread_rwlock_unlock(rwlock
);
115 * '_cupsThreadCreate()' - Create a thread.
118 int /* O - 0 on failure, 1 on success */
120 _cups_thread_func_t func
, /* I - Entry point */
121 void *arg
) /* I - Entry point context */
125 return (pthread_create(&thread
, NULL
, (void *(*)(void *))func
, arg
) == 0);
130 # include <process.h>
134 * '_cupsMutexInit()' - Initialize a mutex.
138 _cupsMutexInit(_cups_mutex_t
*mutex
) /* I - Mutex */
140 InitializeCriticalSection(&mutex
->m_criticalSection
);
146 * '_cupsMutexLock()' - Lock a mutex.
150 _cupsMutexLock(_cups_mutex_t
*mutex
) /* I - Mutex */
158 InitializeCriticalSection(&mutex
->m_criticalSection
);
165 EnterCriticalSection(&mutex
->m_criticalSection
);
170 * '_cupsMutexUnlock()' - Unlock a mutex.
174 _cupsMutexUnlock(_cups_mutex_t
*mutex
) /* I - Mutex */
176 LeaveCriticalSection(&mutex
->m_criticalSection
);
181 * '_cupsRWInit()' - Initialize a reader/writer lock.
185 _cupsRWInit(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
187 _cupsMutexInit((_cups_mutex_t
*)rwlock
);
192 * '_cupsRWLockRead()' - Acquire a reader/writer lock for reading.
196 _cupsRWLockRead(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
198 _cupsMutexLock((_cups_mutex_t
*)rwlock
);
203 * '_cupsRWLockWrite()' - Acquire a reader/writer lock for writing.
207 _cupsRWLockWrite(_cups_rwlock_t
*rwlock
)/* I - Reader/writer lock */
209 _cupsMutexLock((_cups_mutex_t
*)rwlock
);
214 * '_cupsRWUnlock()' - Release a reader/writer lock.
218 _cupsRWUnlock(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
220 _cupsMutexUnlock((_cups_mutex_t
*)rwlock
);
225 * '_cupsThreadCreate()' - Create a thread.
228 int /* O - 0 on failure, 1 on success */
230 _cups_thread_func_t func
, /* I - Entry point */
231 void *arg
) /* I - Entry point context */
233 return (_beginthreadex(NULL
, 0, (LPTHREAD_START_ROUTINE
) func
, arg
, 0, NULL
)
240 * '_cupsMutexInit()' - Initialize a mutex.
244 _cupsMutexInit(_cups_mutex_t
*mutex
) /* I - Mutex */
251 * '_cupsMutexLock()' - Lock a mutex.
255 _cupsMutexLock(_cups_mutex_t
*mutex
) /* I - Mutex */
262 * '_cupsMutexUnlock()' - Unlock a mutex.
266 _cupsMutexUnlock(_cups_mutex_t
*mutex
) /* I - Mutex */
273 * '_cupsRWInit()' - Initialize a reader/writer lock.
277 _cupsRWInit(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
284 * '_cupsRWLockRead()' - Acquire a reader/writer lock for reading.
288 _cupsRWLockRead(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
295 * '_cupsRWLockWrite()' - Acquire a reader/writer lock for writing.
299 _cupsRWLockWrite(_cups_rwlock_t
*rwlock
)/* I - Reader/writer lock */
306 * '_cupsRWUnlock()' - Release a reader/writer lock.
310 _cupsRWUnlock(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
317 * '_cupsThreadCreate()' - Create a thread.
320 int /* O - 0 on failure, 1 on success */
322 _cups_thread_func_t func
, /* I - Entry point */
323 void *arg
) /* I - Entry point context */
325 fputs("DEBUG: CUPS was compiled without threading support, no thread "
326 "created.\n", stderr
);
333 #endif /* HAVE_PTHREAD_H */
337 * End of "$Id: thread.c 11642 2014-02-27 15:57:59Z msweet $".