Guest User

Untitled

a guest
Oct 17th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.52 KB | None | 0 0
  1. func (rw *RWMutex) Lock() {
  2. if race.Enabled {
  3. _ = rw.w.state
  4. race.Disable()
  5. }
  6. // First, resolve competition with other writers.
  7. rw.w.Lock()
  8. // Announce to readers there is a pending writer.
  9. r := atomic.AddInt32(&rw.readerCount, -rwmutexMaxReaders) + rwmutexMaxReaders
  10. // Wait for active readers.
  11. if r != 0 && atomic.AddInt32(&rw.readerWait, r) != 0 {
  12. runtime_Semacquire(&rw.writerSem)
  13. }
  14. if race.Enabled {
  15. race.Enable()
  16. race.Acquire(unsafe.Pointer(&rw.readerSem))
  17. race.Acquire(unsafe.Pointer(&rw.writerSem))
  18. }
Add Comment
Please, Sign In to add comment