std::unique_lock

1.概要

std::unique_lock

2.内容

std::unique_lock 是 C++ 标准库中的一个同步原语,它提供了对互斥锁(mutex)的独占所有权。与 std::lock_guard 类似,std::unique_lock 也用于管理互斥锁的生命周期,但它提供了更多的灵活性和功能。

主要特点和用法

  1. 灵活性:与 std::lock_guard 只能在构造时锁定互斥锁并在析构时解锁不同,std::unique_lock 允许在构造后锁定和解锁互斥锁。这意味着你可以在程序的多个点控制锁的状态。

  2. 条件变量支持std::unique_lock 常与条件变量(std::condition_variable)一起使用,因为它提供了锁定和解锁的能力,这是条件变量等待和通知机制所必需的。

  3. 超时锁定std::unique_lock 还可以尝试在一定时间内获取锁,如果在这段时间内无法获取锁,它将放弃尝试。这是通过 try_lock_for 或 try_lock_until 方法实现的。

  4. 延迟初始化:你可以创建一个未与任何互斥锁关联的 std::unique_lock 对象,然后在需要时将其与特定的互斥锁关联并锁定。

基本用法

#include <mutex>
#include <iostream>
#include <thread>

std::mutex mtx;

void print_thread_id(int id) {
    // 创建一个 unique_lock,并在构造时锁定 mtx
    std::unique_lock<std::mutex> lock(mtx);
    // 在锁的保护下执行代码
    std::cout << "线程 " << id << std::endl;
    // unique_lock 的析构函数会自动解锁
}

int main() {
    std::thread t1(print_thread_id, 1);
    std::thread t2(print_thread_id, 2);

    t1.join();
    t2.join();

    return 0;
}

在这个例子中,std::unique_lock<std::mutex> lock(mtx); 在构造时锁定了互斥锁 mtx,并在其析构时自动解锁,确保了线程安全的打印操作。

高级用法

std::unique_lock<std::mutex> lock(mtx, std::defer_lock);
// 在需要时锁定
lock.lock();
// 执行一些操作
// 显式解锁
lock.unlock();

在这个高级用法中,std::defer_lock 参数指示 std::unique_lock 在构造时不锁定互斥锁。然后,你可以在代码的适当位置调用 lock.lock() 和 lock.unlock() 来控制锁的状态。

总之,std::unique_lock 提供了一个灵活且强大的方式来管理互斥锁的生命周期,是编写多线程程序时的一个重要工具。

3.关联链接

std::unique_lock-优快云博客

std::condition_variable-优快云博客 

std::future和std::promise-优快云博客 

gnome-session-properties-优快云博客 

4.关联知识 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值