brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 9a806c0 Raw
66 lines · c
1//===-- PThreadEvent.h ------------------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9//  Created by Greg Clayton on 6/16/07.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLDB_TOOLS_DEBUGSERVER_SOURCE_PTHREADEVENT_H14#define LLDB_TOOLS_DEBUGSERVER_SOURCE_PTHREADEVENT_H15 16#include <cstdint>17#include <ctime>18#include <functional>19#include <mutex>20 21class PThreadEvent {22public:23  PThreadEvent(uint32_t bits = 0, uint32_t validBits = 0);24  ~PThreadEvent();25 26  uint32_t NewEventBit();27  void FreeEventBits(const uint32_t mask);28 29  void ReplaceEventBits(const uint32_t bits);30  uint32_t GetEventBits() const;31  void SetEvents(const uint32_t mask);32  void ResetEvents(const uint32_t mask);33  // Wait for events to be set or reset. These functions take an optional34  // timeout value. If timeout is NULL an infinite timeout will be used.35  uint32_t36  WaitForSetEvents(const uint32_t mask,37                   const struct timespec *timeout_abstime = NULL) const;38  uint32_t39  WaitForEventsToReset(const uint32_t mask,40                       const struct timespec *timeout_abstime = NULL) const;41 42  uint32_t GetResetAckMask() const { return m_reset_ack_mask; }43  uint32_t SetResetAckMask(uint32_t mask) { return m_reset_ack_mask = mask; }44  uint32_t WaitForResetAck(const uint32_t mask,45                           const struct timespec *timeout_abstime = NULL) const;46 47protected:48  mutable std::mutex m_mutex;49  mutable std::condition_variable m_set_condition;50  uint32_t m_bits;51  uint32_t m_validBits;52  uint32_t m_reset_ack_mask;53 54  uint32_t GetBitsMasked(uint32_t mask) const { return mask & m_bits; }55 56  uint32_t WaitForEventsImpl(const uint32_t mask,57                             const struct timespec *timeout_abstime,58                             std::function<bool()> predicate) const;59 60private:61  PThreadEvent(const PThreadEvent &) = delete;62  PThreadEvent &operator=(const PThreadEvent &rhs) = delete;63};64 65#endif // LLDB_TOOLS_DEBUGSERVER_SOURCE_PTHREADEVENT_H66