多线程程序何时需要加锁

简单的说三条:

多人读,不需要

一读一写要加

多人写要加


常见错误

1读1写没事,读写的内存约多,越容易出事,因为不是原子操作

对int/int64/char型是原子操作, 可不加锁,   其实没人保证这一点的, 要不c++1x还出个原子模板类干什么


常用实例

vector的[]操作是安全的, 如一个线程里 buf[0]++, 另一个buf[1]--是安全的, 因为[]的实现是 start+n, 多线程操作符合多人只读条件


最后锁分为互斥(mutex)和自旋(spin)锁

前者,在第一个人锁住后, 第二个人进不去时会sleep, cpu可以去干别的

spin锁的话,第二个人会一直在门口等, cpu也一直占着,缺点显而易见, 有点是进去快, 效率高

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值