rw_lock_posix.cc revision e48d5845c8b35de2ab73ea055c18a61fa3a9f0be
1e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/*
2e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *
4e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  Use of this source code is governed by a BSD-style license
5e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  that can be found in the LICENSE file in the root of the source
6e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  tree. An additional intellectual property rights grant can be found
7e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  in the file PATENTS.  All contributing project authors may
8e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *  be found in the AUTHORS file in the root of the source tree.
9e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */
10e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
11e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include "rw_lock_linux.h"
12e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
13e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentnamespace webrtc {
14e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentRWLockLinux::RWLockLinux() : _lock()
15e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{
16e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent}
17e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
18e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentRWLockLinux::~RWLockLinux()
19e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{
20e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    pthread_rwlock_destroy(&_lock);
21e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent}
22e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
23e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint RWLockLinux::Init()
24e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{
25e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    return pthread_rwlock_init(&_lock, 0);
26e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent}
27e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
28e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentvoid RWLockLinux::AcquireLockExclusive()
29e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{
30e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    pthread_rwlock_wrlock(&_lock);
31e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent}
32e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
33e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentvoid RWLockLinux::ReleaseLockExclusive()
34e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{
35e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    pthread_rwlock_unlock(&_lock);
36e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent}
37e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
38e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentvoid RWLockLinux::AcquireLockShared()
39e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{
40e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    pthread_rwlock_rdlock(&_lock);
41e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent}
42e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent
43e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentvoid RWLockLinux::ReleaseLockShared()
44e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{
45e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent    pthread_rwlock_unlock(&_lock);
46e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent}
47e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} // namespace webrtc
48