| 405 | #endif |
| 406 | |
| 407 | inline void shared_mutex::unlock_shared() |
| 408 | { |
| 409 | boost::lock_guard<mutex_t> _(mut_); |
| 410 | BOOST_ASSERT(one_or_more_readers()); |
| 411 | count_t num_readers = (state_ & n_readers_) - 1; |
| 412 | state_ &= ~n_readers_; |
| 413 | state_ |= num_readers; |
| 414 | if (no_writer()) |
| 415 | { |
| 416 | if (num_readers == n_readers_ - 1) |
| 417 | gate1_.notify_one(); |
| 418 | } |
| 419 | else |
| 420 | { |
| 421 | if (num_readers == 0) |
| 422 | gate2_.notify_one(); |
| 423 | } |
| 424 | } |
| 425 | |
| 426 | } // thread_v2 |
| 427 | } // boost |
no test coverage detected