c++多线程一

C++标准库提供了类模板std::lock_guard<>,针对互斥类融合实现了RATT手法;在构造时给互斥加锁,在析构时解锁,从而保证互斥总被正确解锁

注意事项:

一旦出现游离的指针或引用,这种保护就全部形同虚设。不管成员函数通过什么“形式”——无论是返回值,还是输出参数(out parameter)——向调用者返回指针或引用,指向受保护的共享数据,就会危及共享数据安全。

std::lock_guard<std::mutex>和std::unique_lock<std::mutex> 的区别:

std::lock_guard<std::mutex>

std::unique_lock<std::mutex>类具有成员函数lock(),unlock(),try_lock(),具有手动加、解锁功能。

比如下列情形:

        1.延时加锁

        2.需要从作用域转移锁的归属权到其他作用域

                std::unique_lock属于可移动却不可复制的型别,好处是准许函数锁定互斥,然后把互斥的归属权转移给函数调用者,好让他在同一个锁的保护下执行其他操作

        3.条件变量 std::condition_variable

                在std::condition_variable wait的时候,必须使用std::unique_lock不然就会出现死锁的情况

std::unique_lock占用更多的空间,也比std::lock_guard略慢。如果std::lock_guard已经满足需求,可以优先使用

出自:《C++并发编程实战 (第2版)》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

blazer_luo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值