diff options
Diffstat (limited to 'gs/base/gpsync.h')
-rw-r--r-- | gs/base/gpsync.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/gs/base/gpsync.h b/gs/base/gpsync.h new file mode 100644 index 000000000..1877a1f71 --- /dev/null +++ b/gs/base/gpsync.h @@ -0,0 +1,70 @@ +/* Copyright (C) 2001-2006 Artifex Software, Inc. + All Rights Reserved. + + This software is provided AS-IS with no warranty, either express or + implied. + + This software is distributed under license and may not be copied, modified + or distributed except as expressly authorized under the terms of that + license. Refer to licensing information at http://www.artifex.com/ + or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, + San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information. +*/ + +/* $Id$ */ +/* Interface to platform-dependent synchronization primitives */ + +#if !defined(gpsync_INCLUDED) +# define gpsync_INCLUDED + +/* Initial version 4/1/98 by John Desrosiers (soho@crl.com). */ +/* 8/9/98 L. Peter Deutsch (ghost@aladdin.com) Changed ...sizeof to + procedures, added some comments. */ + +/* -------- Synchronization primitives ------- */ + +/* + * Semaphores support wait/signal semantics: a wait operation will allow + * control to proceed iff the number of signals since semaphore creation + * is greater than the number of waits. + */ +typedef struct { + void *dummy_; +} gp_semaphore; + +uint gp_semaphore_sizeof(void); +/* + * Hack: gp_semaphore_open(0) succeeds iff it's OK for the memory manager + * to move a gp_semaphore in memory. + */ +int gp_semaphore_open(gp_semaphore * sema); +int gp_semaphore_close(gp_semaphore * sema); +int gp_semaphore_wait(gp_semaphore * sema); +int gp_semaphore_signal(gp_semaphore * sema); + +/* + * Monitors support enter/leave semantics: at most one thread can have + * entered and not yet left a given monitor. + */ +typedef struct { + void *dummy_; +} gp_monitor; + +uint gp_monitor_sizeof(void); +/* + * Hack: gp_monitor_open(0) succeeds iff it's OK for the memory manager + * to move a gp_monitor in memory. + */ +int gp_monitor_open(gp_monitor * mon); +int gp_monitor_close(gp_monitor * mon); +int gp_monitor_enter(gp_monitor * mon); +int gp_monitor_leave(gp_monitor * mon); + +/* + * A new thread starts by calling a procedure, passing it a void * that + * allows it to gain access to whatever data it needs. + */ +typedef void (*gp_thread_creation_callback_t) (void *); +int gp_create_thread(gp_thread_creation_callback_t, void *); + +#endif /* !defined(gpsync_INCLUDED) */ |