文档章节

golang 并发中全局唯一操作

304158
 304158
发布于 06/21 09:53
字数 168
阅读 12
收藏 0
package main

// go 携程共享 数据
// 加锁解锁操作
// 同步锁
import (
	"sync"
	"fmt"
)
// 创建Once结构
var once = sync.Once{}

func computed(data *int, lock *sync.Mutex) {
	once.Do(Echo) // 全局唯一操作
	lock.Lock()   // 加锁霸占数据
	*data++
	fmt.Println(*data)
	lock.Unlock() // 解锁让出数据
}
func Echo() {
	fmt.Println("全局唯一操作")
}

func main() {
	var data int = 0
	lock := &sync.Mutex{}
	for i := 0; i < 10; i++ { // 启动10个携程
		go computed(&data, lock) // 并发中只执行一次 Echo 函数 once.Do(Echo)全局唯一操作
	}

	for {
		lock.Lock()
		c := data
		lock.Unlock()
		if c >= 10 {
			fmt.Println("val=", data, "exit")
			break
		}
	}
}

 

© 著作权归作者所有

共有 人打赏支持
304158
粉丝 1
博文 105
码字总数 30016
作品 0
大兴安岭
私信 提问
golang连接mysql操作及动态连接池设置

golang本身没有提供连接mysql的驱动,但是定义了标准接口供第三方开发驱动。这里连接mysql可以使用第三方库,第三方库推荐使用https://github.com/Go-SQL-Driver/MySQL这个驱动,更新维护都比...

mickelfeng
03/02
0
0
golang中的race检测

golang中的race检测 由于golang中的go是非常方便的,加上函数又非常容易隐藏go。 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题。 所以在本...

王二狗子11
01/07
0
0
内存 kv 数据库--Xedis

Xedis 是一个内存kv数据库 你可曾觉得: - redis的Keys命令性能太低? - DEL命令不够好用、不支持pattern? - 支持的数据结构太少,不能满足业务需求? 等等各种不尽如人意、不够契合业务场景...

Li_Mr
2017/03/27
802
0
开源NewSQL – CockroachDB在百度内部的应用与实践

NewSQL起源 对于MySQL、Oracle、PostgreSQL这样的单机数据库,随着数据量的增长在计算容量和存储容量上都会出现问题。于是后续又推出了基于中间件或者NoSQL的方案,但是都并非完美,比如中间...

技术小能手
05/17
0
0
Goroutine + Channel 实践

goroutine不同于thread,threads是操作系统中的对于一个独立运行实例的描述,不同操作系统,对于thread的实现也不尽相同;但是,操作系统并不知道goroutine的存在,goroutine的调度是有Golan...

黑神领主
2016/12/10
60
0

没有更多内容

加载失败,请刷新页面

加载更多

window下安装maven

1.下载软件包: 2.解压到当前的安装路径: D:\Maven3.5.3 3.添加环境变量: 新建一个名为:MAVEN_HOME 填写解压路径:D:\Maven3.5.3 打开path,添加:%MAVEN_HOME%\bin 确定即可。 4.验证环境...

狼王黄师傅
13分钟前
2
0
聊聊flink的FsCheckpointStorage

序 本文主要研究一下flink的FsCheckpointStorage CheckpointStorage flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/CheckpointStorage.java /** * CheckpointStor......

go4it
35分钟前
2
0
makefile 常用函数

Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员。今天我们来学习下makefile的常用函数。 《GNU make》h...

科陆李明
今天
18
0
Android 报错 Could not find com.android.tools.build:aapt2:3.2.1-4818971.

报错信息: Could not find com.android.tools.build:aapt2:3.2.1-4818971.Searched in the following locations: file:/C:/Users/96110/AppData/Local/Android/Sdk/extras/m2reposito......

lanyu96
今天
9
0
我的Linux系统九阴真经

我的Linux系统九阴真经 在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了。各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行...

linuxCool
今天
35
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部