go语言day16 runtime包 临界资源 sync包

深入理解Java虚拟机到底是什么_java虚拟机是什么-CSDN博客

Golang-100-Days/Day16-20(Go语言基础进阶)/day17_Go语言并发Goroutine.md at master · rubyhan1314/Golang-100-Days · GitHub

runtime

类似jvm,runtime包也提供了垃圾回收功能。

并且jvm实现了对线程创建销毁调度,runtime包下提供了创建协程,控制协程的功能。

调度器中的常用方法

临界资源

多条协程对公共资源tickets的操作

java 复制代码
var tickets = 10
var wg sync.WaitGroup

func main() {
	wg.Add(4)
	go buyTickets()
	go buyTickets()
	go buyTickets()
	go buyTickets()
	wg.Wait()
}

func buyTickets() {
	for i := 10; i > 0; i-- {
		if tickets > 0 {
			time.Sleep(time.Duration(rand.Intn(1000)) * time.Millisecond)
			tickets--
			fmt.Println("售出一张票", "当前票还有", tickets, "张")
		} else {
			fmt.Println("票售罄", tickets)
			break
		}
	}
	wg.Add(-1)
}

运行结果:

数据并不安全。

sync包

Mutex类的互斥锁

RWMutex类的读写锁

是在互斥锁的基础上完成的,读锁 写锁就是两个互斥锁。

1) 读锁上锁,写锁不能再上锁。

2) 读锁上锁,不影响读锁再上锁;

3) 写锁上锁,其他写锁不能上锁。

相关推荐
不吃香菜学java4 小时前
Redis的java客户端
java·开发语言·spring boot·redis·缓存
captain3764 小时前
事务___
java·数据库·mysql
北漂Zachary4 小时前
四大编程语言终极对比
android·java·php·laravel
小江的记录本4 小时前
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
java·网络·人工智能·后端·python·安全·web安全
贵沫末4 小时前
python——打包自己的库并安装
开发语言·windows·python
文祐4 小时前
C++类之虚函数表及其内存布局(一个子类继承一个父类)
开发语言·c++
zuowei28895 小时前
华为网络设备配置文件备份与恢复(上传、下载、导出,导入)
开发语言·华为·php
xiaohe075 小时前
超详细 Python 爬虫指南
开发语言·爬虫·python
嗑嗑嗑瓜子的猫5 小时前
Java!它值得!
java·开发语言
xiaoshuaishuai86 小时前
C# GPU算力与管理
开发语言·windows·c#