Commit Graph

4 Commits

Author SHA1 Message Date
Martchus c404a092cc Add async locks
This might be useful to avoid blocking threads in the thread pool just for
waiting on a global lock. It might also be useful to allow stopping build
actions while they're waiting for a lock.
2022-12-04 00:28:47 +01:00
Martchus d4d187463a Fix problems with global locks
* Aquire the mutex before setting `m_exclusivelyOwned = false`; otherwise
  it might be set after `lock()` has checked it but before `lock()` has
  entered `wait()` leading to a deadlock
* Check state again after `wait()` because it may also be unblocked
  "spuriously" so it isn't guaranteed that the state will have actually
  changed after unblocking
2022-01-25 22:49:20 +01:00
Martchus b9c7f05ef1 Add missing include for condition_variable 2021-05-15 21:04:21 +02:00
Martchus f147dc3179 Fix locks for global resources by implementing a mutex not tied to a thread
* Can not use a normal mutex because we don't want to tie the resources to
  a specific thread (and instead e.g. to a build action which might not be
  executed by a single thread)
* A semaphore would do that but libstdc++ only supports it as of GCC 11 and
  besides it wouldn't distinguish between shared and exclusive locking
2021-02-26 01:39:21 +01:00