Lock always calls runtime_SemacquireMutex(&m.sema, queueLifo, 1) ->
semacquire1 when in starving mode.
```go
// src/runtime/sema.go
func semacquire1(addr *uint32, lifo bool, profile semaProfileFlags,
skipframes int, reason waitReason) {
gp := getg()
if gp != gp.m.curg {
throw("semacquire not on the G stack")
}
// Easy case.
if cansemacquire(addr) {
return
}
// ...
}
func semrelease1(addr *uint32, handoff bool, skipframes int) {
root := semtable.rootFor(addr)
atomic.Xadd(addr, 1) // The semaphore released here may be immediately
contended for by goroutines of other threads calling semacquire1.
}
```
Does a new goroutine immediately acquire the lock instead of queuing fairly
when in starving mode?
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/26c7eb2a-f1aa-44ec-9689-381bcd43e484n%40googlegroups.com.