19 #if !defined(__TBB_show_deprecation_message_reader_writer_lock_H) && defined(__TBB_show_deprecated_header_message)
20 #define __TBB_show_deprecation_message_reader_writer_lock_H
21 #pragma message("TBB Warning: tbb/reader_writer_lock.h is deprecated. For details, please see Deprecated Features appendix in the TBB reference manual.")
24 #if defined(__TBB_show_deprecated_header_message)
25 #undef __TBB_show_deprecated_header_message
28 #ifndef __TBB_reader_writer_lock_H
29 #define __TBB_reader_writer_lock_H
31 #define __TBB_reader_writer_lock_H_include_area
39 namespace interface5 {
47 friend class scoped_lock;
48 friend class scoped_lock_read;
85 enum status_t { waiting_nonblocking, waiting, active, invalid };
88 reader_writer_lock() {
93 ~reader_writer_lock() {
102 friend class reader_writer_lock;
105 scoped_lock(reader_writer_lock&
lock) {
106 internal_construct(
lock);
114 void*
operator new(
size_t s) {
117 void operator delete(
void*
p) {
123 reader_writer_lock *mutex;
127 atomic<status_t> status;
139 friend class reader_writer_lock;
142 scoped_lock_read(reader_writer_lock&
lock) {
143 internal_construct(
lock);
147 ~scoped_lock_read() {
151 void*
operator new(
size_t s) {
154 void operator delete(
void*
p) {
160 reader_writer_lock *mutex;
162 scoped_lock_read *next;
164 atomic<status_t> status;
209 bool start_write(scoped_lock *);
211 void set_next_writer(scoped_lock *w);
213 void end_write(scoped_lock *);
215 bool is_current_writer();
219 void start_read(scoped_lock_read *);
221 void unblock_readers();
226 atomic<scoped_lock_read*> reader_head;
228 atomic<scoped_lock*> writer_head;
230 atomic<scoped_lock*> writer_tail;
234 atomic<uintptr_t> rdr_count_and_flags;
239 using interface5::reader_writer_lock;
244 #undef __TBB_reader_writer_lock_H_include_area