blob: 060e3fe10ada2c330c51cf73cf8f9a6fdfab8361 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include "pthread_impl.h"
int pthread_rwlock_unlock(pthread_rwlock_t *rw)
{
struct pthread *self = pthread_self();
if (rw->_rw_owner == self->tid) {
rw->_rw_owner = 0;
a_store(&rw->_rw_wrlock, 0);
if (rw->_rw_waiters)
__wake(&rw->_rw_wrlock, -1, 0);
return 0;
}
a_dec(&rw->_rw_readers);
if (rw->_rw_waiters && !rw->_rw_readers)
__wake(&rw->_rw_readers, 1, 0);
return 0;
}
|