C++ 多线程处理同一块 buffer:示例代码与解释
"#include std::mutex来保护对 buffer 的访问,以防止多个线程同时修改 buffer 导致竞争条件。通过std::lock_guard来自动管理互斥锁的上锁和解锁。\n\n首先,我们定义了一个processBuffer函数,它接受一个指向 buffer 的指针、buffer 的大小和线程 ID 作为参数。在该函数中,我们使用一个循环来模拟处理 buffer 的过程,并在每次处理一个元素时打印线程 ID 和元素的索引。注意,在访问和修改 buffer 之前,我们使用互斥锁对其进行了上锁,以确保线程安全。\n\n在main函数中,我们创建了一个长度为 10 的 buffer,并将其分配给多个线程进行处理。我们使用std::vector<std::thread>来保存所有线程的引用,然后使用emplace_back方法在 vector 末尾添加线程对象。\n\n最后,我们使用join方法等待所有线程完成,并打印处理后的 buffer 的元素。\n\n运行该代码,你将看到类似以下输出:\n\n\nThread 0: Processing element 0\nThread 1: Processing element 0\nThread 2: Processing element 0\nThread 3: Processing element 0\nThread 4: Processing element 0\nThread 0: Processing element 1\nThread 1: Processing element 1\nThread 2: Processing element 1\nThread 3: Processing element 1\nThread 4: Processing element 1\n...\nProcessed buffer elements: 2 4 6 8 10 12 14 16 18 20\n\n\n注意:在实际应用中,你可能还需要考虑其他细节,如线程安全的资源管理和异常处理等。这里的示例代码仅为了演示基本的多线程处理和互斥锁的使用。
原文地址: https://www.cveoy.top/t/topic/pQPn 著作权归作者所有。请勿转载和采集!