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

c++ mutex

作者:翻成云恨雨愁   发布日期:2025-09-03   浏览:71

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

std::mutex mtx; // 定义一个互斥锁

void print_block(int n, char c) {
    // 尝试锁定互斥锁,确保同一时间只有一个线程可以执行这个代码块
    mtx.lock();
    for (int i = 0; i < n; ++i) {
        std::cout << c;
    }
    std::cout << '\n';
    // 解锁互斥锁
    mtx.unlock();
}

void print_block_with_lock_guard(int n, char c) {
    // 使用lock_guard自动管理互斥锁的锁定和解锁
    std::lock_guard<std::mutex> lock(mtx);
    for (int i = 0; i < n; ++i) {
        std::cout << c;
    }
    std::cout << '\n';
}

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

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

    std::thread th3(print_block_with_lock_guard, 50, '#');
    std::thread th4(print_block_with_lock_guard, 50, '@');

    th3.join();
    th4.join();

    return 0;
}

解释说明:

  1. std::mutex: 用于保护共享资源,防止多个线程同时访问导致数据竞争。
  2. mtx.lock()mtx.unlock(): 手动锁定和解锁互斥锁。在这段代码中,print_block 函数使用了手动锁定和解锁的方式。
  3. std::lock_guard<std::mutex>: 是一个作用域锁,它在构造时自动锁定互斥锁,在析构时自动解锁。这种方式更安全,避免了忘记解锁的问题。print_block_with_lock_guard 函数展示了如何使用 std::lock_guard
  4. 多线程:通过 std::thread 创建了多个线程来并发执行 print_blockprint_block_with_lock_guard 函数。

这段代码演示了如何使用 C++ 中的互斥锁 (std::mutex) 来确保线程安全地访问共享资源。

上一篇:c++ 多态

下一篇:c++向下取整函数

大家都在看

c++闭包

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

c++ 注释

c++如何判断素数

c++ orm框架

c++freopen怎么用

c++ 获取系统时间

c++进制转换函数

c++ vector 清空

c++ tcp

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

Laravel 中文站