]> git.llucax.com Git - software/druntime.git/blob - import/stdc/posix/semaphore.d
First commit of the D Runtime Project. This includes a fully functional runtime...
[software/druntime.git] / import / stdc / posix / semaphore.d
1 /**
2  * D header file for POSIX.
3  *
4  * Copyright: Public Domain
5  * License:   Public Domain
6  * Authors:   Sean Kelly
7  * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
8  */
9 module stdc.posix.semaphore;
10
11 private import stdc.posix.config;
12 private import stdc.posix.time;
13
14 extern (C):
15
16 //
17 // Required
18 //
19 /*
20 sem_t
21 SEM_FAILED
22
23 int sem_close(sem_t*);
24 int sem_destroy(sem_t*);
25 int sem_getvalue(sem_t*, int*);
26 int sem_init(sem_t*, int, uint);
27 sem_t* sem_open(in char*, int, ...);
28 int sem_post(sem_t*);
29 int sem_trywait(sem_t*);
30 int sem_unlink(in char*);
31 int sem_wait(sem_t*);
32 */
33
34 version( linux )
35 {
36     private alias int __atomic_lock_t;
37
38     private struct _pthread_fastlock
39     {
40       c_long            __status;
41       __atomic_lock_t   __spinlock;
42     }
43
44     struct sem_t
45     {
46       _pthread_fastlock __sem_lock;
47       int               __sem_value;
48       void*             __sem_waiting;
49     }
50
51     const SEM_FAILED    = cast(sem_t*) null;
52 }
53 else version( darwin )
54 {
55     alias int sem_t;
56
57     const SEM_FAILED    = cast(sem_t*) null;
58 }
59 else version( freebsd )
60 {
61     const uint SEM_MAGIC = 0x09fa4012;
62     const SEM_USER = 0;
63     struct sem_t
64     {
65         uint magic;
66         pthread_mutex_t lock;
67         pthread_cond_t gtzero;
68         uint count;
69         uint nwaiters;
70         int semid;
71         int syssem;
72         struct _entry
73         {
74             sem* le_next;
75             sem** le_prev;
76         }
77         _entry entry;
78         sem_t** backpointer;
79     }
80
81     const SEM_FAILED = cast(sem_t*) null;
82 }
83
84 int sem_close(sem_t*);
85 int sem_destroy(sem_t*);
86 int sem_getvalue(sem_t*, int*);
87 int sem_init(sem_t*, int, uint);
88 sem_t* sem_open(in char*, int, ...);
89 int sem_post(sem_t*);
90 int sem_trywait(sem_t*);
91 int sem_unlink(in char*);
92 int sem_wait(sem_t*);
93
94 //
95 // Timeouts (TMO)
96 //
97 /*
98 int sem_timedwait(sem_t*, in timespec*);
99 */
100
101 version( linux )
102 {
103     int sem_timedwait(sem_t*, in timespec*);
104 }
105 else version( darwin )
106 {
107     int sem_timedwait(sem_t*, in timespec*);
108 }
109 else version( freebsd )
110 {
111     int sem_timedwait(sem_t*, in timespec*);
112 }