File indexing completed on 2025-02-25 09:34:04
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #ifndef ABSL_SYNCHRONIZATION_INTERNAL_PTHREAD_WAITER_H_
0017 #define ABSL_SYNCHRONIZATION_INTERNAL_PTHREAD_WAITER_H_
0018
0019 #if !defined(_WIN32) && !defined(__MINGW32__)
0020 #include <pthread.h>
0021
0022 #include "absl/base/config.h"
0023 #include "absl/synchronization/internal/kernel_timeout.h"
0024 #include "absl/synchronization/internal/waiter_base.h"
0025
0026 namespace absl {
0027 ABSL_NAMESPACE_BEGIN
0028 namespace synchronization_internal {
0029
0030 #define ABSL_INTERNAL_HAVE_PTHREAD_WAITER 1
0031
0032 class PthreadWaiter : public WaiterCrtp<PthreadWaiter> {
0033 public:
0034 PthreadWaiter();
0035
0036 bool Wait(KernelTimeout t);
0037 void Post();
0038 void Poke();
0039
0040 static constexpr char kName[] = "PthreadWaiter";
0041
0042 private:
0043 int TimedWait(KernelTimeout t);
0044
0045
0046 void InternalCondVarPoke();
0047
0048 pthread_mutex_t mu_;
0049 pthread_cond_t cv_;
0050 int waiter_count_;
0051 int wakeup_count_;
0052 };
0053
0054 }
0055 ABSL_NAMESPACE_END
0056 }
0057
0058 #endif
0059
0060 #endif