mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-28 22:18:29 +00:00
- Introduce fast spinlock API - Double rand64() perf w/ spinlock - Improve raise() on New Technology - Support gettid() across platforms - Implement SA_NODEFER on New Technology - Move the lock intrinsics into LIBC_INTRIN - Make SIGTRAP recoverable on New Technology - Block SIGCHLD in wait4() on New Technology - Add threading prototypes for XNU and FreeBSD - Rewrite abort() fixing its minor bugs on XNU/NT - Shave down a lot of the content in libc/bits/bits.h - Let signal handlers modify CPU registers on New Technology
22 lines
701 B
C
22 lines
701 B
C
#ifndef COSMOPOLITAN_LIBC_INTRIN_SPINLOCK_H_
|
|
#define COSMOPOLITAN_LIBC_INTRIN_SPINLOCK_H_
|
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
|
COSMOPOLITAN_C_START_
|
|
|
|
/* "Place each synchronization variable alone,
|
|
separated by 128 bytes or in a separate cache line."
|
|
──Intel Optimization Manual §8.3.1 */
|
|
struct cthread_spinlock_t {
|
|
bool x;
|
|
int owner;
|
|
char __ignore[128 - 1 - 4];
|
|
} forcealign(128);
|
|
|
|
typedef struct cthread_spinlock_t cthread_spinlock_t;
|
|
|
|
void cthread_spinlock(cthread_spinlock_t *) dontthrow;
|
|
void cthread_spunlock(cthread_spinlock_t *) dontthrow;
|
|
|
|
COSMOPOLITAN_C_END_
|
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
|
#endif /* COSMOPOLITAN_LIBC_INTRIN_SPINLOCK_H_ */
|