随笔分类 -  多线程编程

摘要:在并发编程中,读写场景和生产者消费者场景是非常经典的两种问题。它们的基本思路和实现方法在许多应用中都可以找到。下面分别介绍这两种场景的一些经典问题及其解决方案。 读写场景 经典问题 多线程访问共享资源: 多个线程需要同时读取某个共享数据(例如,配置文件、缓存等),但在某个线程需要写入时,其他线程必须 阅读全文
posted @ 2024-10-06 20:01 牛马chen 编辑
摘要:读写锁是一种特殊的锁机制,允许多个线程同时读取共享数据,但在写入共享数据时,只有一个线程可以进行写操作,其他线程必须等待。 这种机制对于读多写少的场景非常有效,可以提高并发性能。以下是通过 shared_lock、unique_lock、shared_mutex 和 mutex 的解释来说明读写锁的 阅读全文
posted @ 2024-10-06 18:22 牛马chen 编辑
摘要:标准库中的 std::queue 不是线程安全的。 这意味着在多线程环境中,多个线程同时对 std::queue 进行读写操作时,可能会导致数据竞争(data race)和未定义行为。下面是详细的解释: 原因 数据竞争: 当多个线程同时对 std::queue 进行操作(如 push、pop 等), 阅读全文
posted @ 2024-10-06 18:18 牛马chen 编辑
摘要:std::unique_lock 是 C++11 标准库中的一个类,提供了一种灵活的方式来管理互斥量(mutex)。 它比 std::lock_guard 更加灵活,允许在不同的作用域和不同的锁定策略之间进行选择。以下是对 unique_lock 的详细解释,包括其用途、使用方法和优点。 1. 定义 阅读全文
posted @ 2024-10-06 18:06 牛马chen 编辑
摘要:std::packaged_task、std::thread 和 std::async 的区别与联系 std::packaged_task、std::thread 和 std::async 都是 C++11 中提供的并发工具,用于执行任务并处理多线程操作。虽然它们都有类似的作用(并发执行任务),但在 阅读全文
posted @ 2024-10-06 17:58 牛马chen 编辑
摘要:线程创建 头文件#include thread 是在 C++11 标准中引入的。 C++11 标准引入了对多线程编程的标准化支持,其中包括了线程的创建、管理和同步机制。 头文件提供了基本的线程支持库,允许开发者直接使用c++线程进行并行编程,而无需依赖操作系统特定的 API #include <io 阅读全文
posted @ 2024-09-29 18:15 牛马chen 编辑
摘要:多线程环境 并非所有的语言都提供了多线程的环境。即便是C++语言,直到C++11标准之前,也是没有多线程支持的。 在这种情况下,Linux/Unix平台下的开发者通常会使用POSIX Threads,Windows上的开发者也会有相应的接口。 但很明显,这些API都只针对特定的操作系统平台,可移植性 阅读全文
posted @ 2024-09-29 18:00 牛马chen 编辑
摘要:线程的数量应当与处理器的数量相匹配,否则可能会导致性能的下降而不是提升,尤其是在只有一个处理器的情况下。 线程是程序执行的最小单位,它可以在不同的处理器核心上并发执行,利用多核处理器的能力来提升计算效率。 处理器(CPU)核心是物理上能够执行指令的单元。一个处理器可以有一个或多个核心,每个核心都能够 阅读全文
posted @ 2024-09-29 15:57 牛马chen 编辑
摘要:线程安全(Thread Safety)指的是,当多个线程并发执行某段代码时,不会出现竞态条件(Race Condition)等问题,程序能够按照预期正确运行。 一个线程安全的函数,即使在多线程环境下被多个线程同时调用,也能确保其执行的正确性,不会因为共享资源的并发访问而引发错误。 线程安全的定义 线 阅读全文
posted @ 2024-09-29 15:53 牛马chen 编辑

点击右上角即可分享
微信分享提示