日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Go的sync(一)

發布時間:2024/9/19 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go的sync(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

如何處理go并發機制中不同goroutine之間的同步與通信,golang 中提供了sync包和channel機制來解決這一問題.

sync六個基本的函數Once? WaitGroup? cond? ?mutex? rwmutex? pool??

總述

waitgroup

給協程標注 讓程序不因為協程出現panic??一個sync總體的控制函數

once

用once可以保證上面的onc.Do()被執行一次??執行一次之后其他的協程就不會執行了?

cond

cond其實就是哪個控制協程執行的包函數:讓哪個執行,讓全部執行,給函數標注,讓函數等待執行、?加鎖等

Signal是執行一個協程的信號

Broadcast是執行全部協程的信號

wait 協程等待通知,阻塞在此

NewCond創建條件

cond.L.Lock() 給協程加鎖

cond.L.Unlock() ????//釋放鎖

pool

pool就是一個類似中間件的? 存放東西的

put放入

get取出

New為走默認值

RWMUX

RWMUX是控制多個協程對于資源的使用順序的

RLOCK RULOCK

LOCK ULOCK

在一個協程里面

對資源的

讀鎖的時候別的協程也可以讀,但是不可以寫

寫鎖的時候別的協程不可以操作,不可以讀也不可以寫

Mutex

多個協程會操作一個特定資源,就會出現意想不到的錯誤,所以我們使用互斥鎖,

一個協程使用特定資源的時候進行鎖定,用完解鎖,

再讓其他協程使用,所以其他協程想使用此資源,必須自己給資源解鎖或等待正在使用的協程解鎖

在代碼中就是鎖定一段代碼,代碼里面有資源

函數

type Condfunc NewCond(l Locker) *Condfunc (c *Cond) Broadcast()func (c *Cond) Signal()func (c *Cond) Wait() type Locker type Mutexfunc (m *Mutex) Lock()func (m *Mutex) Unlock() type Oncefunc (o *Once) Do(f func()) type Poolfunc (p *Pool) Get() interface{}func (p *Pool) Put(x interface{}) type RWMutexfunc (rw *RWMutex) Lock()func (rw *RWMutex) RLock()func (rw *RWMutex) RLocker() Lockerfunc (rw *RWMutex) RUnlock()func (rw *RWMutex) Unlock() type WaitGroupfunc (wg *WaitGroup) Add(delta int)func (wg *WaitGroup) Done()func (wg *WaitGroup) Wait()

總結

以上是生活随笔為你收集整理的Go的sync(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。