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) 写锁上锁,其他写锁不能上锁。

相关推荐
刀法如飞16 小时前
一款开箱即用的Spring Boot 4 DDD工程脚手架
java·后端·架构
huwei85316 小时前
Q打印表格内容类
开发语言·qt
一嘴一个橘子16 小时前
spring-aop 的 基础使用 -3 - 切点表达式 的提取、复用
java
Re_zero16 小时前
Java新手避坑:为什么我劝你放弃 scanner.nextInt()?
java
oioihoii16 小时前
构建高并发AI服务网关:C++与gRPC的工程实践
开发语言·c++·人工智能
X***078817 小时前
从底层逻辑到工程实践,深入理解C语言在计算机世界中的核心地位与持久价值
c语言·开发语言
晚枫歌F17 小时前
io_uring的介绍和实现
开发语言·php
Good_Starry17 小时前
Java——反射
java
时光追逐者17 小时前
TIOBE 公布 C# 是 2025 年度编程语言
开发语言·c#·.net·.net core·tiobe
花归去17 小时前
echarts 柱状图曲线图
开发语言·前端·javascript