golang的乐观锁与悲观锁

golang的乐观锁与悲观锁

基本概念

  1. 乐观锁和悲观锁是两种思想,用于解决并发场景下的数据竞争问题。

  2. 乐观锁:乐观锁在操作数据时非常乐观,认为别人不会同时修改数据。因此乐观锁不会上锁,只是在执行更新的时候判断一下在此期间别人是否修改了数据:如果别人修改了数据则放弃操作,否则执行操作。

  3. 悲观锁:悲观锁在操作数据时比较悲观,认为别人会同时修改数据。因此操作数据时直接把数据锁住,直到操作完成后才会释放锁;上锁期间其他人不能修改数据。

package main

import (
	"fmt"
	"sync"
	"sync/atomic"
	"time"
)

func IncreValue1() {
	value1++
}

func IncreValue2() {
	atomic.AddInt32(&value2, 1)
}

func IncreValue3() {
	lock.Lock()
	value3++
	lock.Unlock()
}

var value1, value2, value3 int32
var lock sync.Mutex

func main() {
	//开启1000个线程,并执行自增操作
	for i := 0; i < 1000; i++ {
		go IncreValue1()
		go IncreValue2()
		go IncreValue3()
	}
	//打印结果
	time.Sleep(1000)
	fmt.Println("线程不安全:", value1)
	fmt.Println("乐观锁:", value2)
	fmt.Println("悲观锁:&
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值