Botan 3.6.1
Crypto and TLS for C&
rwlock.h
Go to the documentation of this file.
1/*
2* (C) 2019 Jack Lloyd
3*
4* Botan is released under the Simplified BSD License (see license.txt)
5*/
6
7#ifndef BOTAN_RWLOCK_H_
8#define BOTAN_RWLOCK_H_
9
10#include <botan/types.h>
11#include <condition_variable>
12#include <mutex>
13
14namespace Botan {
15
16/**
17* A read-write lock. Writers are favored.
18*/
20 public:
21 RWLock();
22
23 void lock();
24 void unlock();
25
26 void lock_shared();
27 void unlock_shared();
28
29 private:
30 std::mutex m_mutex;
31 std::condition_variable m_gate1;
32 std::condition_variable m_gate2;
33 uint32_t m_state;
34
35 // 2**31 concurrent readers should be enough for anyone
36 static const uint32_t is_writing = static_cast<uint32_t>(1) << 31;
37 static const uint32_t readers_mask = ~is_writing;
38};
39
40} // namespace Botan
41
42#endif
int(* final)(unsigned char *, CTX *)
#define BOTAN_TEST_API
Definition compiler.h:51
secure_vector< T > lock(const std::vector< T > &in)
Definition secmem.h:70
std::vector< T > unlock(const secure_vector< T > &in)
Definition secmem.h:75