【C++】多线程编程 您所在的位置:网站首页 一级响应的含义和特点 【C++】多线程编程

【C++】多线程编程

2023-07-08 08:57| 来源: 网络整理| 查看: 265

目录 一、线程的概念和基本操作线程的定义和特点线程的创建和销毁线程的启动和停止线程的状态和管理 二、线程同步和互斥线程同步和互斥的概念互斥锁(mutex) 三、线程的通信四、C++11的多线程支持std::thread类的使用std::mutex、std::condition_variable、std::atomic等C++标准库提供的多线程相关类的使用(待更新) 五、多线程编程的实践六、线程池(待更新)线程池的概念和作用(待更新) 七、并发数据结构(待更新)八、多线程网络编程(待更新)

一、线程的概念和基本操作 线程的定义和特点

定义:线程是计算机中执行代码的最小单位,每个线程都有自己的指令序列和栈空间,可以并发执行。与进程不同,线程间可以共享进程的资源,包括内存、文件和设备等。

特点:线程可以用于并行处理任务,提高程序的执行效率。

线程的创建和销毁

创建线程:在程序中新建一个线程,使其可以执行特定的任务。线程创建的过程通常包括分配线程所需的资源、设置线程的属性和初始化线程的上下文。

销毁线程:结束一个线程的执行,释放线程占用的资源。

#include #include // 线程执行的函数 void threadFunction() { std::cout while (true) { std::cout std::cout // 加锁 mtx.lock(); // 临界区,访问共享资源 std::cout // 加锁 mtx.lock(); // 访问共享数据 sharedData++; // 解锁 mtx.unlock(); } int main() { // 创建多个线程 std::thread t1(threadFunction); std::thread t2(threadFunction); // 等待线程执行完毕 t1.join(); t2.join(); // 输出共享数据 std::cout std::this_thread::sleep_for(std::chrono::seconds(1)); // 模拟生产消息的耗时操作 std::lock_guard lock(mtx); messages.push(i); // 生产消息 cv.notify_all(); // 通知消费者线程 } } void consumerFunction() { while (true) { std::unique_lock lock(mtx); cv.wait(lock, [] { return !messages.empty(); }); // 等待消息的到来 int message = messages.front(); // 消费消息 messages.pop(); std::cout std::unique_lock lock(mtx); // 加锁 // 等待准备好的信号,阻塞当前线程 while (!ready) { cv.wait(lock); } // 处理数据 std::cout cv.wait(lock); } // 设置数据 data = value; // 数据设置完成,唤醒处理线程 ready = true; cv.notify_all(); // 解锁 lock.unlock(); } int main() { // 创建处理线程和设置数据线程 std::thread processThread(processData); std::thread setDataThread(setData, 42); // 等待线程执行完成 processThread.join(); setDataThread.join(); return 0; }

·互斥锁(std::mutex)用于保护共享资源的访问,确保每次只有一个线程可以访问共享资源。 ·条件变量(std::condition_variable)用于线程间的通信和同步。通过等待和通知机制,线程可以根据条件进行阻塞和唤醒。 ·ready变量是一个共享资源,表示是否准备好处理数据。 ·data变量是一个共享资源,表示待处理的数据。 ·在processData线程函数中,首先加锁并等待准备好的信号,然后处理数据,并唤醒其他等待的线程。 ·在setData线程函数中,首先加锁并等待数据处理完成的信号,然后设置数据,并唤醒处理线程。 ·在主函数中,创建处理线程和设置数据线程,并等待它们执行完成。

六、线程池(待更新) 线程池的概念和作用(待更新) 七、并发数据结构(待更新) 八、多线程网络编程(待更新)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有