Date: Fri, 29 Mar 2024 00:12:05 +0800 (CST) Message-ID: <216582541.5747.1711642325402@localhost.localdomain> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_5746_267186144.1711642325401" ------=_Part_5746_267186144.1711642325401 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html
=E5=86=85=E5=AD=98=E9=94=81=E6=A8=A1=E5=9D=97=EF=BC=8C=E4=B9=9F=E7=A7=B0=
=E4=B9=8B=E4=B8=BA=E5=8A=A8=E6=80=81=E4=BA=92=E6=96=A5=E9=94=81
=E6=A8=A1=E5=9D=97=EF=BC=8C=E6=94=AF=E6=8C=81=E6=8C=89=E7=85=A7=E7=
=BB=99=E5=AE=9A=E9=94=AE=E5=90=8D=E5=8A=A8=E6=80=81=E7=94=9F=E6=88=90=E4=BA=
=92=E6=96=A5=E9=94=81
=EF=BC=8C=E5=B9=B6=E5=8F=91=E5=AE=89=E5=85=A8=
=E5=B9=B6=E6=94=AF=E6=8C=81Try*Lock
=E7=89=B9=E6=80=A7=E3=80=82=
=E5=BD=93=E7=BB=B4=E6=8A=A4=E5=A4=A7=E9=87=8F=E5=8A=A8=E6=80=81=E4=BA=92= =E6=96=A5=E9=94=81=E7=9A=84=E5=9C=BA=E6=99=AF=E6=97=B6=EF=BC=8C=E5=A6=82=E6= =9E=9C=E4=B8=8D=E5=86=8D=E4=BD=BF=E7=94=A8=E7=9A=84=E4=BA=92=E6=96=A5=E9=94= =81=E5=AF=B9=E8=B1=A1=EF=BC=8C=E8=AF=B7=E6=89=8B=E5=8A=A8=E8=B0=83=E7=94=A8=
Remove
=E6=96=B9=E6=B3=95=E5=88=A0=E9=99=A4=E6=8E=89=E3=80=82= p>
=E4=BD=BF=E7=94=A8=E6=96=B9=E5=BC=8F=EF=BC=9A
import "github.com/gogf/gf/v2/os= /gmlock"
=E4=BD=BF=E7=94=A8=E5=9C=BA=E6=99=AF=EF=BC=9A =E9=9C=80=
=E8=A6=81=E5=8A=A8=E6=80=81=E5=88=9B=E5=BB=BA=E4=BA=92=E6=96=A5=E9=94=
=81
=EF=BC=8C=E6=88=96=E8=80=85=E9=9C=80=E8=A6=81=E7=BB=B4=E6=
=8A=A4=E5=A4=A7=E9=87=8F=E5=8A=A8=E6=80=81=E9=94=81
=E7=9A=84=E5=9C=
=BA=E6=99=AF=EF=BC=9B
=E6=8E=A5=E5=8F=A3=E6=96=87=E6=A1=A3=EF=BC=9A
https://pkg.go.dev/github.com/gogf/gf/v2/os= /gmlock
func Lock(key string) func LockFunc(key string, f func()) func RLock(key string) func RLockFunc(key string, f func()) func RUnlock(key string) func Remove(key string) func TryLock(key string) bool func TryLockFunc(key string, f func()) bool func TryRLock(key string) bool func TryRLockFunc(key string, f func()) bool func Unlock(key string) type Locker func New() *Locker func (l *Locker) Clear() func (l *Locker) Lock(key string) func (l *Locker) LockFunc(key string, f func()) func (l *Locker) RLock(key string) func (l *Locker) RLockFunc(key string, f func()) func (l *Locker) RUnlock(key string) func (l *Locker) Remove(key string) func (l *Locker) TryLock(key string) bool func (l *Locker) TryLockFunc(key string, f func()) bool func (l *Locker) TryRLock(key string) bool func (l *Locker) TryRLockFunc(key string, f func()) bool func (l *Locker) Unlock(key string)
package main import ( "time" "sync" "github.com/gogf/gf/v2/os/glog" "github.com/gogf/gf/v2/os/gmlock" ) func main() { key :=3D "lock" wg :=3D sync.WaitGroup{} for i :=3D 0; i < 10; i++ { wg.Add(1) go func(i int) { gmlock.Lock(key) glog.Println(i) time.Sleep(time.Second) gmlock.Unlock(key) wg.Done() }(i) } wg.Wait() }
=E8=AF=A5=E7=A4=BA=E4=BE=8B=E4=B8=AD=EF=BC=8C=E6=A8=A1=E6=8B=9F=E4=BA=86=
=E5=90=8C=E6=97=B6=E5=BC=80=E5=90=AF10
=E4=B8=AAgoroutine=
=EF=BC=8C=E4=BD=86=E5=90=8C=E4=B8=80=E6=97=B6=E5=88=BB=E5=8F=AA=E8=
=83=BD=E6=9C=89=E4=B8=80=E4=B8=AAgoroutine
=E8=8E=B7=E5=BE=97=
=E9=94=81=EF=BC=8C=E8=8E=B7=E5=BE=97=E9=94=81=E7=9A=84goroutine
=E6=89=A7=E8=A1=8C1
=E7=A7=92=E5=90=8E=E9=80=80=E5=87=BA=EF=BC=
=8C=E5=85=B6=E4=BB=96goroutine
=E6=89=8D=E8=83=BD=E8=8E=B7=E5=
=BE=97=E9=94=81=E3=80=82
=E6=89=A7=E8=A1=8C=E5=90=8E=EF=BC=8C=E8=BE=93=E5=87=BA=E7=BB=93=E6=9E=9C= =E4=B8=BA=EF=BC=9A
2018-10= -15 23:57:28.295 9 2018-10-15 23:57:29.296 0 2018-10-15 23:57:30.296 1 2018-10-15 23:57:31.296 2 2018-10-15 23:57:32.296 3 2018-10-15 23:57:33.297 4 2018-10-15 23:57:34.297 5 2018-10-15 23:57:35.297 6 2018-10-15 23:57:36.298 7 2018-10-15 23:57:37.298 8
TryLock
=E6=96=B9=E6=B3=95=E6=98=AF=E6=9C=89=E8=BF=94=E5=9B=
=9E=E5=80=BC=E7=9A=84=EF=BC=8C=E5=AE=83=E8=A1=A8=E7=A4=BA=E7=94=A8=E6=9D=A5=
=E5=B0=9D=E8=AF=95=E8=8E=B7=E5=8F=96=E9=94=81=EF=BC=8C=E5=A6=82=E6=9E=9C=E8=
=8E=B7=E5=8F=96=E6=88=90=E5=8A=9F=EF=BC=8C=E5=88=99=E8=BF=94=E5=9B=9E=
true
=EF=BC=9B=E5=A6=82=E6=9E=9C=E8=8E=B7=E5=8F=96=E5=A4=B1=E8=B4=A5=
=EF=BC=88=E5=8D=B3=E4=BA=92=E6=96=A5=E9=94=81=E5=B7=B2=E8=A2=AB=E5=85=B6=E4=
=BB=96goroutine
=E8=8E=B7=E5=8F=96=EF=BC=89=EF=BC=8C=E5=88=99=
=E8=BF=94=E5=9B=9Efalse
=E3=80=82
package main import ( "sync" "github.com/gogf/gf/v2/os/glog" "time" "github.com/gogf/gf/v2/os/gmlock" ) func main() { key :=3D "lock" wg :=3D sync.WaitGroup{} for i :=3D 0; i < 10; i++ { wg.Add(1) go func(i int) { if gmlock.TryLock(key) { glog.Println(i) time.Sleep(time.Second) gmlock.Unlock(key) } else { glog.Println(false) } wg.Done() }(i) } wg.Wait() }
=E5=90=8C=E7=90=86=EF=BC=8C=E5=9C=A8=E8=AF=A5=E7=A4=BA=E4=BE=8B=E4=B8=AD=
=EF=BC=8C=E5=90=8C=E6=97=B6=E4=B9=9F=E5=8F=AA=E6=9C=891
=E4=B8=
=AAgoroutine
=E8=83=BD=E8=8E=B7=E5=BE=97=E9=94=81=EF=BC=8C=E5=
=85=B6=E4=BB=96goroutine
=E5=9C=A8TryLock
=E5=A4=B1=
=E8=B4=A5=E4=BE=BF=E7=9B=B4=E6=8E=A5=E9=80=80=E5=87=BA=E4=BA=86=E3=80=82
=E6=89=A7=E8=A1=8C=E5=90=8E=EF=BC=8C=E8=BE=93=E5=87=BA=E7=BB=93=E6=9E=9C= =E4=B8=BA=EF=BC=9A
2018-10= -16 00:01:59.172 9 2018-10-16 00:01:59.172 false 2018-10-16 00:01:59.172 false 2018-10-16 00:01:59.172 false 2018-10-16 00:01:59.172 false 2018-10-16 00:01:59.172 false 2018-10-16 00:01:59.172 false 2018-10-16 00:01:59.172 false 2018-10-16 00:01:59.172 false 2018-10-16 00:01:59.176 false