]> Cypherpunks repositories - gostls13.git/commit
runtime/cgo: reduce runtime init done check using atomic
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Fri, 23 Jun 2023 06:20:33 +0000 (13:20 +0700)
committerGopher Robot <gobot@golang.org>
Fri, 21 Jul 2023 05:26:00 +0000 (05:26 +0000)
commitb104a0ef32e1388dbd6af7174975857320fb8e80
tree69a0e55c644dadc838ad6c8016e53c3134190dc2
parentd1612071d979e11311fb4a838503d1fe7989373b
runtime/cgo: reduce runtime init done check using atomic

Every call from C to Go does acquire a mutex to check whether Go runtime
has been fully initialized. This often does not matter, because the lock
is held only briefly. However, with code that does a lot of parallel
calls from C to Go could cause heavy contention on the mutex.

Since this is an initialization guard, we can double check with atomic
operation to provide a fast path in case the initialization is done.
With this CL, program in #60961 reduces from ~2.7s to ~1.8s.

Fixes #60961

Change-Id: Iba4cabbee3c9bc646e70ef7eb074212ba63fdc04
Reviewed-on: https://go-review.googlesource.com/c/go/+/505455
Reviewed-by: Heschi Kreinick <heschi@google.com>
Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
src/runtime/cgo/gcc_libinit.c