mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-30 06:20:28 +00:00
Use *NSYNC for POSIX threads locking APIs
Condition variables, barriers, and r/w locks now work very well.
This commit is contained in:
parent
3de35e196c
commit
b5cb71ab84
197 changed files with 3734 additions and 3817 deletions
43
third_party/nsync/counter.h
vendored
Normal file
43
third_party/nsync/counter.h
vendored
Normal file
|
@ -0,0 +1,43 @@
|
|||
#ifndef NSYNC_COUNTER_H_
|
||||
#define NSYNC_COUNTER_H_
|
||||
#include "third_party/nsync/atomic.h"
|
||||
#include "third_party/nsync/time.h"
|
||||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||
COSMOPOLITAN_C_START_
|
||||
|
||||
struct nsync_dll_element_s_;
|
||||
|
||||
/* An nsync_counter represents an unsigned integer that can count up and down,
|
||||
and wake waiters when zero. */
|
||||
typedef struct nsync_counter_s_ *nsync_counter;
|
||||
|
||||
/* Return a freshly allocated nsync_counter with the specified value,
|
||||
of NULL if an nsync_counter cannot be created.
|
||||
|
||||
Any non-NULL returned value should be passed to nsync_counter_free() when no
|
||||
longer needed. */
|
||||
nsync_counter nsync_counter_new(uint32_t value);
|
||||
|
||||
/* Free resources associated with c. Requires that c was allocated by
|
||||
nsync_counter_new(), and no concurrent or future operations are applied to
|
||||
c. */
|
||||
void nsync_counter_free(nsync_counter c);
|
||||
|
||||
/* Add delta to c, and return its new value. It is a checkable runtime error
|
||||
to decrement c below 0, or to increment c (i.e., apply a delta > 0) after a
|
||||
waiter has waited. */
|
||||
uint32_t nsync_counter_add(nsync_counter c, int32_t delta);
|
||||
|
||||
/* Return the current value of c. */
|
||||
uint32_t nsync_counter_value(nsync_counter c);
|
||||
|
||||
/* Wait until c has value 0, or until abs_deadline, then return
|
||||
the value of c. It is a checkable runtime error to increment c after
|
||||
a waiter may have been woken due to the counter reaching zero.
|
||||
If abs_deadline==nsync_time_no_deadline, the deadline
|
||||
is far in the future. */
|
||||
uint32_t nsync_counter_wait(nsync_counter c, nsync_time abs_deadline);
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
#endif /* NSYNC_COUNTER_H_ */
|
Loading…
Add table
Add a link
Reference in a new issue