#include "threads_impl.h" #include "stdio_impl.h" #include int ftrylockfile(FILE* f) { int tid = __thread_get_tid(); if (f->lock == tid) { if (f->lockcount == LONG_MAX) return -1; f->lockcount++; return 0; } if (atomic_load(&f->lock) < 0) atomic_store(&f->lock, 0); if (atomic_load(&f->lock) || a_cas_shim(&f->lock, 0, tid)) return -1; f->lockcount = 1; return 0; }