博客
关于我
[Golang]golang中自动锁的实现
阅读量:274 次
发布时间:2019-03-03

本文共 781 字,大约阅读时间需要 2 分钟。

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
    }
}

转载地址:http://jcjl.baihongyu.com/

你可能感兴趣的文章
21.2.4总结
查看>>
21.2.5总结
查看>>
21.2.6总结
查看>>
Min_25筛
查看>>
21.2.22 总结
查看>>
【SSL_P2876】2017年东莞市信息学特长生测试题 工程
查看>>
【洛谷_P1347】排序
查看>>
【洛谷_CF261D】Maxim and Increasing Subsequence
查看>>
【洛谷_P2704】炮兵阵地
查看>>
【洛谷_P1433】吃奶酪
查看>>
【SSL_2020.10.26】圆盘
查看>>
【牛客_2020.10.28】购物
查看>>
【牛客_2020.10.27】交换
查看>>
【SSL_2020.10.28】区间和的和
查看>>
JavaWeb笔记--Tomcat
查看>>
例题6-17 看图写树(Undraw the Trees, UVa 10562)
查看>>
例题 9-3 旅行(Tour, ACM/ICPC SEERC 2005, UVa1347)
查看>>
html中head里的meta标签的用法
查看>>
【学习笔记】NumPy数据存取与函数
查看>>
ssm项目学习8-bootstrap遇到的错误整理篇
查看>>