blob: dd69f52eb9b658092cc6fa01a02f94cdf5411e8d [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef WEBRTC_SYSTEM_WRAPPERS_SOURCE_RW_LOCK_GENERIC_H_
12#define WEBRTC_SYSTEM_WRAPPERS_SOURCE_RW_LOCK_GENERIC_H_
13
phoglund@webrtc.org59ad5412012-12-18 15:20:35 +000014#include "webrtc/system_wrappers/interface/rw_lock_wrapper.h"
pbos@webrtc.orga2a27182013-08-01 17:26:15 +000015#include "webrtc/typedefs.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000016
17namespace webrtc {
henrike@webrtc.org9f847232012-09-25 20:27:51 +000018
niklase@google.com470e71d2011-07-07 08:21:25 +000019class CriticalSectionWrapper;
20class ConditionVariableWrapper;
21
henrike@webrtc.org9f847232012-09-25 20:27:51 +000022class RWLockGeneric : public RWLockWrapper {
phoglund@webrtc.org59ad5412012-12-18 15:20:35 +000023 public:
24 RWLockGeneric();
25 virtual ~RWLockGeneric();
niklase@google.com470e71d2011-07-07 08:21:25 +000026
pbos@webrtc.orga2a27182013-08-01 17:26:15 +000027 virtual void AcquireLockExclusive() OVERRIDE;
28 virtual void ReleaseLockExclusive() OVERRIDE;
niklase@google.com470e71d2011-07-07 08:21:25 +000029
pbos@webrtc.orga2a27182013-08-01 17:26:15 +000030 virtual void AcquireLockShared() OVERRIDE;
31 virtual void ReleaseLockShared() OVERRIDE;
niklase@google.com470e71d2011-07-07 08:21:25 +000032
phoglund@webrtc.org59ad5412012-12-18 15:20:35 +000033 private:
34 CriticalSectionWrapper* critical_section_;
35 ConditionVariableWrapper* read_condition_;
36 ConditionVariableWrapper* write_condition_;
niklase@google.com470e71d2011-07-07 08:21:25 +000037
phoglund@webrtc.org59ad5412012-12-18 15:20:35 +000038 int readers_active_;
39 bool writer_active_;
40 int readers_waiting_;
41 int writers_waiting_;
niklase@google.com470e71d2011-07-07 08:21:25 +000042};
henrike@webrtc.org9f847232012-09-25 20:27:51 +000043
44} // namespace webrtc
45
46#endif // WEBRTC_SYSTEM_WRAPPERS_SOURCE_RW_LOCK_GENERIC_H_