Go語言中的普通鎖Mutex和讀寫鎖RWMutex

2021-10-09 23:30:43 字數 964 閱讀 2122

type mutex struct

案例1.用普通鎖來實現火車站賣票

// mymutexdes project main.go

package main

import (

"fmt"

"sync"

"time"

)//全域性變數

var ticks = 100

var wg sync.waitgroup

var mutex sync.mutex

func saletickets(name string, wg *sync.waitgroup) else

mutex.unlock()

} wg.done() //通知計數器減一

}func main()

效果如下:

圖(1)用mutex模擬火車站賣票

type rwmutex struct

案例2. 主線程加鎖、解鎖子協程

// mymutexwrite project main.go

package main

import (

"fmt"

"sync"

"time"

)func main() (i)

} time.sleep(1 * time.second)

fmt.println("main 嘗試寫鎖定...")

rwm.lock()

fmt.println("main 已經寫鎖定了...")

rwm.unlock()

fmt.printf("main 寫解鎖...")

}

效果如下:

圖(2) 主線程加鎖、解鎖子協程

go語言中的鎖

雖然提供了channel來保證協程中的通訊,在某些情況下,還是更適合使用鎖來保證執行緒的安全.go語言中的鎖分兩種 互斥鎖mutex和讀寫鎖rwmutex 1.互斥鎖 mutex 互斥鎖是執行緒安全中最常用的鎖,基本原理就是對某個操作進行加鎖,無論讀寫同一時間內只有乙個協程可以對當前資料進行操作,只...

Go語言中普通函式與方法的區別分析

1.對於普通函式,接收者為值型別時,不能將指標型別的資料直接傳遞,反之亦然。2.對於方法 如struct的方法 接收者為值型別時,可以直接用指標型別的變數呼叫方法,反過來同樣也可以。以下為簡程式設計客棧單示例 複製 如下 package structtest 普通函式與方法的區別 在接收者分別為值型...

GO語言中的常量和GO的 列舉

常量是乙個簡單值的識別符號,一旦定義不能改變,常量中的值只能是布林,數字型 整數型 浮點型和複數 和字串型。go語言常量中不要全部大寫,因為go語言中的大小寫是有含義的,比如首字母大寫代表public 常量的定義 1 顯式型別 const 常量名 型別 值 const path string www...