Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c++ unique_lock

作者:刀剑傲天   发布日期:2026-03-21   浏览:93

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

std::mutex mtx;

void print_block(int n, char c) {
    // 创建 unique_lock 对象,自动锁定互斥锁
    std::unique_lock<std::mutex> lck(mtx);

    // 打印字符块
    for (int i = 0; i < n; ++i) {
        std::cout << c;
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
    }
    std::cout << '\n';

    // 离开作用域时,unique_lock 自动解锁互斥锁
}

int main() {
    std::thread th1(print_block, 50, '*');
    std::thread th2(print_block, 50, '$');

    th1.join();
    th2.join();

    return 0;
}

解释说明

  1. std::mutexstd::unique_lock:

    • std::mutex 是一个互斥锁类,用于保护共享资源。
    • std::unique_lock 是一个可移动的互斥锁管理器,它可以延迟锁定和解锁操作,并且可以在作用域结束时自动释放锁。
  2. print_block 函数:

    • 该函数接受两个参数:n 表示要打印的字符数量,c 表示要打印的字符。
    • 在函数内部,创建了一个 std::unique_lock<std::mutex> 对象 lck,它会立即锁定 mtx 互斥锁。
    • 然后,函数打印指定数量的字符,并在每次打印后休眠一段时间以模拟长时间运行的任务。
    • 当函数返回时,lck 对象离开其作用域,互斥锁会被自动解锁。
  3. 线程创建与同步:

    • main 函数中,创建了两个线程 th1th2,它们分别调用 print_block 函数来打印不同的字符。
    • 使用 join 方法等待两个线程完成执行。

通过这种方式,std::unique_lock 确保了对共享资源(如标准输出)的访问是线程安全的。

上一篇:c++ ceil函数

下一篇:c++中string

大家都在看

c++闭包

c++向上取整的代码

c++单引号和双引号的区别

c++ 注释

c++如何判断素数

c++ functional

c++框架代码

c++格式化字符串

c++ orm框架

c++ string类

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站