blob: cd5848f4316c89bdb837826a31701cace28eaaaa [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"
niklase@google.com470e71d2011-07-07 08:21:25 +000015
16namespace webrtc {
henrike@webrtc.org9f847232012-09-25 20:27:51 +000017
niklase@google.com470e71d2011-07-07 08:21:25 +000018class CriticalSectionWrapper;
19class ConditionVariableWrapper;
20
henrike@webrtc.org9f847232012-09-25 20:27:51 +000021class RWLockGeneric : public RWLockWrapper {
phoglund@webrtc.org59ad5412012-12-18 15:20:35 +000022 public:
23 RWLockGeneric();
24 virtual ~RWLockGeneric();
niklase@google.com470e71d2011-07-07 08:21:25 +000025
phoglund@webrtc.org59ad5412012-12-18 15:20:35 +000026 virtual void AcquireLockExclusive();
27 virtual void ReleaseLockExclusive();
niklase@google.com470e71d2011-07-07 08:21:25 +000028
phoglund@webrtc.org59ad5412012-12-18 15:20:35 +000029 virtual void AcquireLockShared();
30 virtual void ReleaseLockShared();
niklase@google.com470e71d2011-07-07 08:21:25 +000031
phoglund@webrtc.org59ad5412012-12-18 15:20:35 +000032 private:
33 CriticalSectionWrapper* critical_section_;
34 ConditionVariableWrapper* read_condition_;
35 ConditionVariableWrapper* write_condition_;
niklase@google.com470e71d2011-07-07 08:21:25 +000036
phoglund@webrtc.org59ad5412012-12-18 15:20:35 +000037 int readers_active_;
38 bool writer_active_;
39 int readers_waiting_;
40 int writers_waiting_;
niklase@google.com470e71d2011-07-07 08:21:25 +000041};
henrike@webrtc.org9f847232012-09-25 20:27:51 +000042
43} // namespace webrtc
44
45#endif // WEBRTC_SYSTEM_WRAPPERS_SOURCE_RW_LOCK_GENERIC_H_