7#include <botan/internal/rwlock.h>
15 std::unique_lock<std::mutex>
lock(m_mutex);
16 while(m_state & is_writing)
18 m_state |= is_writing;
19 while(m_state & readers_mask)
25 std::unique_lock<std::mutex>
lock(m_mutex);
32 std::unique_lock<std::mutex>
lock(m_mutex);
33 while((m_state & is_writing) || (m_state & readers_mask) == readers_mask)
35 const uint32_t num_readers = (m_state & readers_mask) + 1;
36 m_state &= ~readers_mask;
37 m_state |= num_readers;
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)
53 if(num_readers == readers_mask - 1)