[Golang]golang中自動鎖的實現

golang作爲原生支持多線程的語言,爲了實現線程安全的package,經常需要對全局變量自動加鎖,以便安全的訪問全局變量。
廢話不多說,直接上代碼:
package main
import (
       "sync"
    "fmt"
)

type AutoLock struct {
    obj  interface{}
    lock sync.Mutex
}

func (me *AutoLock) SafeSet(obj interface{}) {
    me.lock.Lock()
    defer me.lock.Unlock()
    me.obj = obj
}

func (me *AutoLock) LockGet() interface{} {
    me.lock.Lock()
    return me.obj
}

func (me *AutoLock) Unlock() {
    me.lock.Unlock()
}


var g_val AutoLock
func gorutine_func(ch chan int) {
    r := g_val.LockGet().(*int)
    defer g_val.Unlock()
    *r++
    fmt.Println(*r)
    ch <- 1
}
func main() {
    g_val.SafeSet(new(int))
    const n = 10
    ch := make(chan int)
    for i := 0; i < n; i++ {
        go gorutine_func(ch)
    }
    for i := 0; i  i++ {
        <-ch
    }
}
發佈了23 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章