blob: 3afdc9ba3ec2e1b71b80f7e5867e2754e52ddd87 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
from libcpp cimport bool
cdef extern from "<semaphore>" namespace "std" nogil:
# Notes on templating:
# Cython doesn't currently support non-class template types so it's
# declared here as a class template.
# counting_semaphore has a default max value anyway, so you typically
# don't need to use the templates. If you do though, then there's a
# few tricks - e.g. you can define a class with a cname of "3" for
# example.
# Note on thread-safety:
# You should use these classes without the GIL. It's very easy
# to deadlock with the GIL, and we're assuming that anyone going
# low enough level to be using semaphores doesn't want the overhead
# of Cython handling GIL safety.
cdef cppclass counting_semaphore[LeastMaxValue=*]:
counting_semaphore(ptrdiff_t desired)
void release() except+
void release(ptrdiff_t update) except+
void acquire() except+
bool try_acquire()
# unfortunately, we don't currently define chrono types
bool try_acquire_for[T](T duration) except+
bool try_acquire_until[T](T timepoint) except+
ptrdiff_t max()
cdef cppclass binary_semaphore:
binary_semaphore(ptrdiff_t desired)
void release() except+
void release(ptrdiff_t update) except+
void acquire() except+
bool try_acquire()
# unfortunately, we don't currently define chrono types
bool try_acquire_for[T](T timepoint) except+
bool try_acquire_until[T](T duration) except+
ptrdiff_t max()
|