Botan 2.13.0 Crypto and TLS for C++11

- Main Page
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Member Functions | List of all members
Botan::RWLock Class Referencefinal

`#include <rwlock.h>`

## Public Member Functions
void | lock ()
void | lock_shared ()
| RWLock ()
void | unlock ()
void | unlock_shared ()

## Detailed Description

A read-write lock. Writers are favored.

Definition at line 19 of file rwlock.h.

## Constructor & Destructor Documentation

Botan::RWLock::RWLock | ( |  | ) |

Definition at line 11 of file rwlock.cpp.

11 : m_state(0) {}

## Member Function Documentation

void Botan::RWLock::lock | ( |  | ) |

Definition at line 13 of file rwlock.cpp.

Referenced by lock_shared(), unlock(), and unlock_shared().

14 {
15 std::unique_lock<std::mutex> lock(m_mutex);
16 while(m_state & is_writing)
17 m_gate1.wait(lock);
18 m_state |= is_writing;
19 while(m_state & readers_mask)
20 m_gate2.wait(lock);
21 }
Botan::RWLock::lock
void lock()
Definition: rwlock.cpp:13

void Botan::RWLock::lock_shared | ( |  | ) |

Definition at line 30 of file rwlock.cpp.

References lock().

31 {
32 std::unique_lock<std::mutex> lock(m_mutex);
33 while((m_state & is_writing) || (m_state & readers_mask) == readers_mask)
34 m_gate1.wait(lock);
35 const uint32_t num_readers = (m_state & readers_mask) + 1;
36 m_state &= ~readers_mask;
37 m_state |= num_readers;
38 }
Botan::RWLock::lock
void lock()
Definition: rwlock.cpp:13

void Botan::RWLock::unlock | ( |  | ) |

Definition at line 23 of file rwlock.cpp.

References lock().

24 {
25 std::unique_lock<std::mutex> lock(m_mutex);
26 m_state = 0;
27 m_gate1.notify_all();
28 }
Botan::RWLock::lock
void lock()
Definition: rwlock.cpp:13

void Botan::RWLock::unlock_shared | ( |  | ) |

Definition at line 40 of file rwlock.cpp.

References lock().

41 {
42 std::unique_lock<std::mutex> lock(m_mutex);
43 const uint32_t num_readers = (m_state & readers_mask) - 1;
44 m_state &= ~readers_mask;
45 m_state |= num_readers;
46 if(m_state & is_writing)
47 {
48 if(num_readers == 0)
49 m_gate2.notify_one();
50 }
51 else
52 {
53 if(num_readers == readers_mask - 1)
54 m_gate1.notify_one();
55 }
56 }
Botan::RWLock::lock
void lock()
Definition: rwlock.cpp:13

The documentation for this class was generated from the following files:

- src/lib/utils/thread_utils/rwlock.h
- src/lib/utils/thread_utils/rwlock.cpp