summaryrefslogtreecommitdiff
path: root/gs/base/gpsync.h
diff options
context:
space:
mode:
Diffstat (limited to 'gs/base/gpsync.h')
-rw-r--r--gs/base/gpsync.h70
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) */