No description
Find a file
Branden Brown 14be23e5b4 semaphore: cancel acquisition with a done context
When acquiring from a semaphore could proceed without contention, the
previous behavior was to always do so, even when the provided context
was done. This was the documented behavior, but it could lead to
confusion. It isn't much more expensive to check the context error, so
cancel acquisition if it's done.

Fixes golang/go#63615.

goos: linux
goarch: amd64
pkg: golang.org/x/sync/semaphore
cpu: 12th Gen Intel(R) Core(TM) i5-1235U
                                        │  old.bench  │             new.bench              │
                                        │   sec/op    │   sec/op     vs base               │
AcquireSeq/Weighted-acquire-1-1-1-12      26.45n ± 2%   27.25n ± 3%  +3.04% (p=0.001 n=20)
AcquireSeq/Weighted-acquire-2-1-1-12      26.96n ± 1%   27.12n ± 1%       ~ (p=0.104 n=20)
AcquireSeq/Weighted-acquire-16-1-1-12     26.07n ± 3%   27.48n ± 1%  +5.45% (p=0.000 n=20)
AcquireSeq/Weighted-acquire-128-1-1-12    26.19n ± 2%   27.24n ± 1%  +4.01% (p=0.000 n=20)
AcquireSeq/Weighted-acquire-2-2-1-12      25.61n ± 1%   25.99n ± 2%       ~ (p=0.066 n=20)
AcquireSeq/Weighted-acquire-16-2-8-12     209.6n ± 2%   211.0n ± 3%       ~ (p=0.280 n=20)
AcquireSeq/Weighted-acquire-128-2-64-12   1.669µ ± 1%   1.721µ ± 2%  +3.09% (p=0.000 n=20)
AcquireSeq/Weighted-acquire-2-1-2-12      51.08n ± 1%   53.03n ± 2%  +3.82% (p=0.000 n=20)
AcquireSeq/Weighted-acquire-16-8-2-12     52.48n ± 2%   53.66n ± 2%  +2.26% (p=0.028 n=20)
AcquireSeq/Weighted-acquire-128-64-2-12   52.27n ± 1%   53.71n ± 2%  +2.75% (p=0.000 n=20)
geomean                                   60.06n        61.69n       +2.71%

Change-Id: I0ae1a0bb6c027461ac1a9ee71c51efd8427ab308
Reviewed-on: https://go-review.googlesource.com/c/sync/+/536275
Auto-Submit: Bryan Mills <bcmills@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
2024-03-04 17:26:02 +00:00
errgroup errgroup: add reference to sync.WaitGroup 2023-12-07 16:58:19 +00:00
semaphore semaphore: cancel acquisition with a done context 2024-03-04 17:26:02 +00:00
singleflight singleflight: add panicError.Unwrap method 2023-09-26 16:46:49 +00:00
syncmap all: update go directive to 1.18 2023-10-11 14:04:17 +00:00
codereview.cfg .: add codereview.cfg 2016-12-06 01:46:32 +00:00
CONTRIBUTING.md CONTRIBUTING.md: remove note about not accepting Pull Requests 2018-03-14 18:01:46 +00:00
go.mod all: update go directive to 1.18 2023-10-11 14:04:17 +00:00
LICENSE initial commit 2015-10-30 14:31:46 +11:00
PATENTS initial commit 2015-10-30 14:31:46 +11:00
README.md README.md: add badge to pkg.go.dev 2020-12-07 23:25:20 +00:00

Go Sync

Go Reference

This repository provides Go concurrency primitives in addition to the ones provided by the language and "sync" and "sync/atomic" packages.

Download/Install

The easiest way to install is to run go get -u golang.org/x/sync. You can also manually git clone the repository to $GOPATH/src/golang.org/x/sync.

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://golang.org/doc/contribute.html.

The main issue tracker for the sync repository is located at https://github.com/golang/go/issues. Prefix your issue with "x/sync:" in the subject line, so it is easy to find.