C++语言多线程学习应用案例

简介: 使用C++ `std::thread`和`std::mutex`实现多线程同步。示例创建两个线程`t1`、`t2`,共享资源`shared_resource`,每个线程调用`increase`函数递增资源值。互斥锁确保在任何时候只有一个线程访问资源,防止数据竞争。最后输出资源总值。

一个C++多线程学习应用案例是使用std::thread库创建多个线程,并使用互斥锁(std::mutex)保护共享资源。以下是一个简单的示例:

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

std::mutex mtx; // 定义一个互斥锁
int shared_resource = 0; // 定义一个共享资源

// 线程函数,用于增加共享资源的值
void increase() {
   
    for (int i = 0; i < 100000; ++i) {
   
        std::unique_lock<std::mutex> lock(mtx); // 获取互斥锁
        ++shared_resource; // 修改共享资源
        lock.unlock(); // 释放互斥锁
    }
}

int main() {
   
    std::thread t1(increase); // 创建两个线程,分别执行increase函数
    std::thread t2(increase);

    t1.join(); // 等待线程t1执行完毕
    t2.join(); // 等待线程t2执行完毕

    std::cout << "Shared resource value: " << shared_resource << std::endl; // 输出共享资源的值

    return 0;
}

在这个示例中,我们创建了两个线程t1t2,它们都执行increase函数。在increase函数中,我们使用互斥锁保护共享资源shared_resource的访问,以避免数据竞争。最后,我们在主线程中输出共享资源的值。

相关文章
|
14天前
|
存储 安全 算法
Go语言是如何支持多线程的
【10月更文挑战第21】Go语言是如何支持多线程的
104 72
|
7天前
|
缓存 安全 C++
C++无锁队列:解锁多线程编程新境界
【10月更文挑战第27天】
24 7
|
7天前
|
消息中间件 存储 安全
|
13天前
|
存储 并行计算 安全
C++多线程应用
【10月更文挑战第29天】C++ 中的多线程应用广泛,常见场景包括并行计算、网络编程中的并发服务器和图形用户界面(GUI)应用。通过多线程可以显著提升计算速度和响应能力。示例代码展示了如何使用 `pthread` 库创建和管理线程。注意事项包括数据同步与互斥、线程间通信和线程安全的类设计,以确保程序的正确性和稳定性。
|
14天前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
|
14天前
|
Go 调度 开发者
Go语言多线程的优势
【10月更文挑战第15天】
11 4
|
23天前
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
22 5
|
28天前
|
存储 编译器 C语言
深入计算机语言之C++:类与对象(上)
深入计算机语言之C++:类与对象(上)
|
28天前
|
存储 分布式计算 编译器
深入计算机语言之C++:C到C++的过度-2
深入计算机语言之C++:C到C++的过度-2
|
28天前
|
编译器 Linux C语言
深入计算机语言之C++:C到C++的过度-1
深入计算机语言之C++:C到C++的过度-1