sync
函数名 | 函数描述/介绍 |
---|---|
sync.NewCond | NewCond 创建一个 Cond 结构体引用,即一个条件变量,参考golang官方文档:https://golang.org/pkg/sync/#Cond 条件变量是一种用于协调多个并发任务之间的同步机制,它允许一个任务等待某个条件成立,同时允许其他任务在条件成立时通知等待的任务 |
sync.NewLock | NewLock 创建一个 Mutex 结构体引用,用于实现互斥锁,其帮助我们避免多个并发任务访问同一个资源时出现数据竞争问题 它实际是 NewMutex 的别名 |
sync.NewMap | NewMap 创建一个 Map 结构体引用,这个 Map 是并发安全的 |
sync.NewMutex | NewMutex 创建一个 Mutex 结构体引用,用于实现互斥锁,其帮助我们避免多个并发任务访问同一个资源时出现数据竞争问题 |
sync.NewOnce | NewOnce 创建一个 Once 结构体引用,其帮助我们确保某个函数只会被执行一次 |
sync.NewPool | NewPool 创建一个 Pool 结构体引用,其帮助我们复用临时对象,减少内存分配的次数 |
sync.NewRWMutex | NewRWMutex 创建一个 RWMutex 结构体引用,用于实现读写锁,其帮助我们避免多个并发任务访问同一个资源时出现数据竞争问题 |
sync.NewSizedWaitGroup | NewSizedWaitGroup 创建一个 SizedWaitGroup 结构体引用,其帮助我们在处理多个并发任务时,等待所有任务完成后再进行下一步操作 SizedWaitGroup 与 WaitGroup 的区别在于 SizedWaitGroup 可以限制并发任务的数量 |
sync.NewWaitGroup | NewWaitGroup 创建一个 WaitGroup 结构体引用,其帮助我们在处理多个并发任务时,等待所有任务完成后再进行下一步操作 |
#
函数定义#
NewCond#
详细描述NewCond 创建一个 Cond 结构体引用,即一个条件变量,参考golang官方文档:https://golang.org/pkg/sync/#Cond
条件变量是一种用于协调多个并发任务之间的同步机制,它允许一个任务等待某个条件成立,同时允许其他任务在条件成立时通知等待的任务
Example:
c = sync.NewCond()done = falsefunc read(name) {c.L.Lock()for !done {c.Wait()}println(name, "start reading")c.L.Unlock()}
func write(name) {time.sleep(1)println(name, "start writing")c.L.Lock()done = truec.L.Unlock()println(name, "wakes all")c.Broadcast()}
go read("reader1")go read("reader2")go read("reader3")write("writer")time.sleep(3)
#
定义NewCond() *sync.Cond
#
返回值返回值(顺序) | 返回值类型 | 返回值解释 |
---|---|---|
r1 | *sync.Cond |
#
NewLock#
详细描述NewLock 创建一个 Mutex 结构体引用,用于实现互斥锁,其帮助我们避免多个并发任务访问同一个资源时出现数据竞争问题
它实际是 NewMutex 的别名
Example:
m = sync.NewMutex()newMap = make(map[string]string)go func{for {m.Lock() // 请求锁defer m.Unlock() // 释放锁newMap["key"] = "value" // 防止多个并发任务同时修改 newMap}}for {println(newMap["key"])}
#
定义NewLock() *sync.Mutex
#
返回值返回值(顺序) | 返回值类型 | 返回值解释 |
---|---|---|
r1 | *sync.Mutex |
#
NewMap#
详细描述NewMap 创建一个 Map 结构体引用,这个 Map 是并发安全的
Example:
m = sync.NewMap()go func {for {m.Store("key", "value2")}}for {m.Store("key", "value")v, ok = m.Load("key")if ok {println(v)}}
#
定义NewMap() *sync.Map
#
返回值返回值(顺序) | 返回值类型 | 返回值解释 |
---|---|---|
r1 | *sync.Map |
#
NewMutex#
详细描述NewMutex 创建一个 Mutex 结构体引用,用于实现互斥锁,其帮助我们避免多个并发任务访问同一个资源时出现数据竞争问题
Example:
m = sync.NewMutex()newMap = make(map[string]string)go func{for {m.Lock() // 请求锁defer m.Unlock() // 释放锁newMap["key"] = "value" // 防止多个并发任务同时修改 newMap}}for {println(newMap["key"])}
#
定义NewMutex() *sync.Mutex
#
返回值返回值(顺序) | 返回值类型 | 返回值解释 |
---|---|---|
r1 | *sync.Mutex |
#
NewOnce#
详细描述NewOnce 创建一个 Once 结构体引用,其帮助我们确保某个函数只会被执行一次
Example:
o = sync.NewOnce()for i in 10 {o.Do(func() { println("this message will only print once") })}
#
定义NewOnce() *sync.Once
#
返回值返回值(顺序) | 返回值类型 | 返回值解释 |
---|---|---|
r1 | *sync.Once |
#
NewPool#
详细描述NewPool 创建一个 Pool 结构体引用,其帮助我们复用临时对象,减少内存分配的次数
Example:
p = sync.NewPool(func() {return make(map[string]string)})m = p.Get() // 从 Pool 中获取,如果 Pool 中没有,则会调用传入的第一个参数函数,返回一个新的 map[string]stringm["1"] = "2"println(m) // {"1": "2"}// 将 m 放回 Pool 中p.Put(m)m2 = p.Get() // 从 Pool 中获取,实际上我们获取到的是刚 Put 进去的 mprintln(m2) // {"1": "2"}
#
定义NewPool(newFunc ...func() any) *sync.Pool
#
参数参数名 | 参数类型 | 参数解释 |
---|---|---|
newFunc | ...func() any |
#
返回值返回值(顺序) | 返回值类型 | 返回值解释 |
---|---|---|
r1 | *sync.Pool |
#
NewRWMutex#
详细描述NewRWMutex 创建一个 RWMutex 结构体引用,用于实现读写锁,其帮助我们避免多个并发任务访问同一个资源时出现数据竞争问题
Example:
m = sync.NewRWMutex()newMap = make(map[string]string)go func{for {m.Lock() // 请求写锁defer m.Unlock() // 释放写锁newMap["key"] = "value" // 防止多个并发任务同时修改 newMap}}for {m.RLock() // 请求读锁defer m.RUnlock() // 释放读锁println(newMap["key"])}
#
定义NewRWMutex() *sync.RWMutex
#
返回值返回值(顺序) | 返回值类型 | 返回值解释 |
---|---|---|
r1 | *sync.RWMutex |
#
NewSizedWaitGroup#
详细描述NewSizedWaitGroup 创建一个 SizedWaitGroup 结构体引用,其帮助我们在处理多个并发任务时,等待所有任务完成后再进行下一步操作
SizedWaitGroup 与 WaitGroup 的区别在于 SizedWaitGroup 可以限制并发任务的数量
Example:
wg = sync.NewSizedWaitGroup(5) // 限制大小为5for i in 10 {wg.Add() // 任务数量超过5时,会阻塞,直到有任务完成go func(i) {defer wg.Done()time.Sleep(i)printf("任务%d 完成\n", i)}(i)}wg.Wait()println("所有任务完成")
#
定义NewSizedWaitGroup(size int, ctxs ...context.Context) *utils.SizedWaitGroup
#
参数参数名 | 参数类型 | 参数解释 |
---|---|---|
size | int | |
ctxs | ...context.Context |
#
返回值返回值(顺序) | 返回值类型 | 返回值解释 |
---|---|---|
r1 | *utils.SizedWaitGroup |
#
NewWaitGroup#
详细描述NewWaitGroup 创建一个 WaitGroup 结构体引用,其帮助我们在处理多个并发任务时,等待所有任务完成后再进行下一步操作
Example:
wg = sync.NewWaitGroup()for i in 5 {wg.Add() // 增加一个任务go func(i) {defer wg.Done()time.Sleep(i)printf("任务%d 完成\n", i)}(i)}wg.Wait()println("所有任务完成")
#
定义NewWaitGroup(ctxs ...context.Context) *WaitGroupProxy
#
参数参数名 | 参数类型 | 参数解释 |
---|---|---|
ctxs | ...context.Context |
#
返回值返回值(顺序) | 返回值类型 | 返回值解释 |
---|---|---|
r1 | *WaitGroupProxy |