博客
关于我
[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/

你可能感兴趣的文章
【OpenCV】 2.4.13-编程过程遇到问题记录
查看>>
Wireshark抓包实验
查看>>
maven仓库设置,windows和mac
查看>>
Android错误收集
查看>>
浙大机器学习课程-8-支持向量机(原问题转化为对偶问题)
查看>>
css3之路- 结构性伪类
查看>>
239_自定义View画圆环环形
查看>>
流媒体音视频服务云管理平台EasyNVS平台中视频播放页面出现错误码的问题解决
查看>>
渗透测试学习笔记之案例五
查看>>
Pentest Wiki Part4 后渗透(二)
查看>>
/usr/bin/ld: cannot find -ltcmalloc 错误的解决方法
查看>>
【python】protobuf 使用学习记录
查看>>
php许愿墙
查看>>
攻防世界 secret-galaxy-300
查看>>
两张图帮你更好理解git常用指令
查看>>
【Lintcode】452. Remove Linked List Elements
查看>>
IDEA中JavaWeb项目成功部署运行,但在浏览器访问时依然报404错误
查看>>
视频课程:CMOS模拟集成电路设计--已上线
查看>>
砂原良徳创作的“日本媒体艺术分散式博物馆”主题曲《Nihon no Sugata》在官网发布
查看>>
实习复习--mysql视图17
查看>>