Home | History | Annotate | Download | only in runtime

Lines Matching refs:rw

32 // rlock locks rw for reading.
33 func (rw *rwmutex) rlock() {
39 if int32(atomic.Xadd(&rw.readerCount, 1)) < 0 {
42 lock(&rw.rLock)
43 if rw.readerPass > 0 {
45 rw.readerPass -= 1
46 unlock(&rw.rLock)
51 m.schedlink = rw.readers
52 rw.readers.set(m)
53 unlock(&rw.rLock)
61 // runlock undoes a single rlock call on rw.
62 func (rw *rwmutex) runlock() {
63 if r := int32(atomic.Xadd(&rw.readerCount, -1)); r < 0 {
68 if atomic.Xadd(&rw.readerWait, -1) == 0 {
70 lock(&rw.rLock)
71 w := rw.writer.ptr()
75 unlock(&rw.rLock)
81 // lock locks rw for writing.
82 func (rw *rwmutex) lock() {
84 lock(&rw.wLock)
87 r := int32(atomic.Xadd(&rw.readerCount, -rwmutexMaxReaders)) + rwmutexMaxReaders
89 lock(&rw.rLock)
90 if r != 0 && atomic.Xadd(&rw.readerWait, r) != 0 {
93 rw.writer.set(m)
94 unlock(&rw.rLock)
99 unlock(&rw.rLock)
103 // unlock unlocks rw for writing.
104 func (rw *rwmutex) unlock() {
106 r := int32(atomic.Xadd(&rw.readerCount, rwmutexMaxReaders))
111 lock(&rw.rLock)
112 for rw.readers.ptr() != nil {
113 reader := rw.readers.ptr()
114 rw.readers = reader.schedlink
121 rw.readerPass += uint32(r)
122 unlock(&rw.rLock)
124 unlock(&rw.wLock)