1.RWMutex常用方法
- Lock/Unlock
- RLock/RUnlock
- RLocker 为读操作返回一个Locker接 口的对象
2025年08月04日
2025年08月04日
原始C++标准仅支持单线程编程。新的C++标准(称为C++11或C++0x)于2011年发布。在C++11中,引入了新的线程库。因此运行本文程序需要C++至少符合C++11标准。
2025年08月04日
当程序中使用goroutine来操作一个全局变量时,拿map来举例,同时使用多个协程来向map中写入数据,此时代码可能会报错.
package main
import (
"fmt"
)
var (
result = make(map[int]int, 10)
)
func Strata(num int) {
res := 1
for i := 1; i <= num ; i ++ {
res *= i
}
// 将结果放入map中
result[num] = res
}
// 使用全局变量加锁方式 解决了 并发写入问题,但是 不知道具体 协程什么时候运行结束
// 那么这个问题怎么解决呢?
func main() {
// 这里开启多个协程, 完成这个任务
// 问题1: fatal error: concurrent map writes (存在并发安全问题)
// 问题2: 通过 go build -race main.go >> 拿到main.exe,并运行 >> Found 2 data race(s) 发现有两个存在竞争关系
for i := 1; i <= 20 ; i ++ {
go Strata(i)
}
// 输出结果
for i, v := range result {
fmt.Printf("result[%v]=%v \n", i, v)
}
}
2025年08月04日
QThread析构函数的说明:
请注意,删除一个QThread对象不会停止它管理的线程的执行。 删除正在运行的QThread(即isFinished()返回false)将导致程序崩溃。 在删除QThread之前等待finished()信号。
2025年08月04日
sync包提供了基本的同步基元,如互斥锁。除了Once和WaitGroup类型,大部分都是适用于低水平程序线程,高水平的同步使用channel通信更好一些。
2025年08月04日
一句话总结
互斥锁(Mutex)通过独占访问保证资源安全;信号量(Semaphore)控制线程并发数量;条件变量(Condition Variable)实现线程间状态通知;读写锁(Read-Write Lock)区分读写操作提升效率;原子操作(Atomic)通过硬件指令确保操作的不可分割性。