12345678910111213141516171819202122232425 |
- package gls
- var (
- stackTagPool = &idPool{}
- )
- // Will return this goroutine's identifier if set. If you always need a
- // goroutine identifier, you should use EnsureGoroutineId which will make one
- // if there isn't one already.
- func GetGoroutineId() (gid uint, ok bool) {
- return readStackTag()
- }
- // Will call cb with the current goroutine identifier. If one hasn't already
- // been generated, one will be created and set first. The goroutine identifier
- // might be invalid after cb returns.
- func EnsureGoroutineId(cb func(gid uint)) {
- if gid, ok := readStackTag(); ok {
- cb(gid)
- return
- }
- gid := stackTagPool.Acquire()
- defer stackTagPool.Release(gid)
- addStackTag(gid, func() { cb(gid) })
- }
|