Source file src/runtime/note_other.go
1 // Copyright 2024 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build !js 6 7 package runtime 8 9 // sleep and wakeup on one-time events. 10 // before any calls to notesleep or notewakeup, 11 // must call noteclear to initialize the Note. 12 // then, exactly one thread can call notesleep 13 // and exactly one thread can call notewakeup (once). 14 // once notewakeup has been called, the notesleep 15 // will return. future notesleep will return immediately. 16 // subsequent noteclear must be called only after 17 // previous notesleep has returned, e.g. it's disallowed 18 // to call noteclear straight after notewakeup. 19 // 20 // notetsleep is like notesleep but wakes up after 21 // a given number of nanoseconds even if the event 22 // has not yet happened. if a goroutine uses notetsleep to 23 // wake up early, it must wait to call noteclear until it 24 // can be sure that no other goroutine is calling 25 // notewakeup. 26 // 27 // notesleep/notetsleep are generally called on g0, 28 // notetsleepg is similar to notetsleep but is called on user g. 29 type note struct { 30 // Futex-based impl treats it as uint32 key, 31 // while sema-based impl as M* waitm. 32 key uintptr 33 } 34