]>
git.ipfire.org Git - thirdparty/cups.git/blob - cups/thread.c
2 * Threading primitives for CUPS.
4 * Copyright 2009-2014 by Apple Inc.
6 * These coded instructions, statements, and computer programs are the
7 * property of Apple Inc. and are protected by Federal copyright
8 * law. Distribution and use rights are outlined in the file "LICENSE.txt"
9 * which should have been included with this file. If this file is
10 * file is missing or damaged, see the license at "http://www.cups.org/".
12 * This file is subject to the Apple OS-Developed Software exception.
16 * Include necessary headers...
19 #include "cups-private.h"
20 #include "thread-private.h"
23 #if defined(HAVE_PTHREAD_H)
25 * '_cupsMutexInit()' - Initialize a mutex.
29 _cupsMutexInit(_cups_mutex_t
*mutex
) /* I - Mutex */
31 pthread_mutex_init(mutex
, NULL
);
36 * '_cupsMutexLock()' - Lock a mutex.
40 _cupsMutexLock(_cups_mutex_t
*mutex
) /* I - Mutex */
42 pthread_mutex_lock(mutex
);
47 * '_cupsMutexUnlock()' - Unlock a mutex.
51 _cupsMutexUnlock(_cups_mutex_t
*mutex
) /* I - Mutex */
53 pthread_mutex_unlock(mutex
);
58 * '_cupsRWInit()' - Initialize a reader/writer lock.
62 _cupsRWInit(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
64 pthread_rwlock_init(rwlock
, NULL
);
69 * '_cupsRWLockRead()' - Acquire a reader/writer lock for reading.
73 _cupsRWLockRead(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
75 pthread_rwlock_rdlock(rwlock
);
80 * '_cupsRWLockWrite()' - Acquire a reader/writer lock for writing.
84 _cupsRWLockWrite(_cups_rwlock_t
*rwlock
)/* I - Reader/writer lock */
86 pthread_rwlock_wrlock(rwlock
);
91 * '_cupsRWUnlock()' - Release a reader/writer lock.
95 _cupsRWUnlock(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
97 pthread_rwlock_unlock(rwlock
);
102 * '_cupsThreadCreate()' - Create a thread.
105 int /* O - 0 on failure, 1 on success */
107 _cups_thread_func_t func
, /* I - Entry point */
108 void *arg
) /* I - Entry point context */
112 return (pthread_create(&thread
, NULL
, (void *(*)(void *))func
, arg
) == 0);
117 # include <process.h>
121 * '_cupsMutexInit()' - Initialize a mutex.
125 _cupsMutexInit(_cups_mutex_t
*mutex
) /* I - Mutex */
127 InitializeCriticalSection(&mutex
->m_criticalSection
);
133 * '_cupsMutexLock()' - Lock a mutex.
137 _cupsMutexLock(_cups_mutex_t
*mutex
) /* I - Mutex */
145 InitializeCriticalSection(&mutex
->m_criticalSection
);
152 EnterCriticalSection(&mutex
->m_criticalSection
);
157 * '_cupsMutexUnlock()' - Unlock a mutex.
161 _cupsMutexUnlock(_cups_mutex_t
*mutex
) /* I - Mutex */
163 LeaveCriticalSection(&mutex
->m_criticalSection
);
168 * '_cupsRWInit()' - Initialize a reader/writer lock.
172 _cupsRWInit(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
174 _cupsMutexInit((_cups_mutex_t
*)rwlock
);
179 * '_cupsRWLockRead()' - Acquire a reader/writer lock for reading.
183 _cupsRWLockRead(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
185 _cupsMutexLock((_cups_mutex_t
*)rwlock
);
190 * '_cupsRWLockWrite()' - Acquire a reader/writer lock for writing.
194 _cupsRWLockWrite(_cups_rwlock_t
*rwlock
)/* I - Reader/writer lock */
196 _cupsMutexLock((_cups_mutex_t
*)rwlock
);
201 * '_cupsRWUnlock()' - Release a reader/writer lock.
205 _cupsRWUnlock(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
207 _cupsMutexUnlock((_cups_mutex_t
*)rwlock
);
212 * '_cupsThreadCreate()' - Create a thread.
215 int /* O - 0 on failure, 1 on success */
217 _cups_thread_func_t func
, /* I - Entry point */
218 void *arg
) /* I - Entry point context */
220 return (_beginthreadex(NULL
, 0, (LPTHREAD_START_ROUTINE
) func
, arg
, 0, NULL
)
227 * '_cupsMutexInit()' - Initialize a mutex.
231 _cupsMutexInit(_cups_mutex_t
*mutex
) /* I - Mutex */
238 * '_cupsMutexLock()' - Lock a mutex.
242 _cupsMutexLock(_cups_mutex_t
*mutex
) /* I - Mutex */
249 * '_cupsMutexUnlock()' - Unlock a mutex.
253 _cupsMutexUnlock(_cups_mutex_t
*mutex
) /* I - Mutex */
260 * '_cupsRWInit()' - Initialize a reader/writer lock.
264 _cupsRWInit(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
271 * '_cupsRWLockRead()' - Acquire a reader/writer lock for reading.
275 _cupsRWLockRead(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
282 * '_cupsRWLockWrite()' - Acquire a reader/writer lock for writing.
286 _cupsRWLockWrite(_cups_rwlock_t
*rwlock
)/* I - Reader/writer lock */
293 * '_cupsRWUnlock()' - Release a reader/writer lock.
297 _cupsRWUnlock(_cups_rwlock_t
*rwlock
) /* I - Reader/writer lock */
304 * '_cupsThreadCreate()' - Create a thread.
307 int /* O - 0 on failure, 1 on success */
309 _cups_thread_func_t func
, /* I - Entry point */
310 void *arg
) /* I - Entry point context */
312 fputs("DEBUG: CUPS was compiled without threading support, no thread "
313 "created.\n", stderr
);
320 #endif /* HAVE_PTHREAD_H */