下面是一个使用C++11的示例代码,展示了如何启动多个线程处理同一块buffer,并在所有线程处理完成后释放buffer。

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

std::mutex mtx;  // 互斥锁,用于保护对buffer的访问

void processBuffer(int* buffer, int bufferSize, int threadId) {
    for (int i = 0; i < bufferSize; ++i) {
        // 模拟处理buffer的过程
        std::this_thread::sleep_for(std::chrono::milliseconds(100));
        
        // 使用互斥锁保护对buffer的访问
        std::lock_guard<std::mutex> lock(mtx);
        
        std::cout << "Thread " << threadId << ": Processing element " << i << std::endl;
        buffer[i] *= 2;  // 修改buffer中的元素
    }
}

int main() {
    const int bufferSize = 10;
    int buffer[bufferSize] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    
    std::vector<std::thread> threads;
    
    // 创建多个线程处理buffer
    for (int i = 0; i < 5; ++i) {
        threads.emplace_back(processBuffer, buffer, bufferSize, i);
    }
    
    // 等待所有线程完成
    for (auto& thread : threads) {
        thread.join();
    }
    
    // 打印处理后的buffer
    std::cout << "Processed buffer elements: ";
    for (int i = 0; i < bufferSize; ++i) {
        std::cout << buffer[i] << " ";
    }
    std::cout << std::endl;
    
    return 0;
}

在上面的代码中,我们使用了std::mutex来保护对buffer的访问,以防止多个线程同时修改buffer导致竞争条件。通过std::lock_guard来自动管理互斥锁的上锁和解锁。

首先,我们定义了一个processBuffer函数,它接受一个指向buffer的指针、buffer的大小和线程ID作为参数。在该函数中,我们使用一个循环来模拟处理buffer的过程,并在每次处理一个元素时打印线程ID和元素的索引。注意,在访问和修改buffer之前,我们使用互斥锁对其进行了上锁,以确保线程安全。

main函数中,我们创建了一个长度为10的buffer,并将其分配给多个线程进行处理。我们使用std::vector<std::thread>来保存所有线程的引用,然后使用emplace_back方法在vector末尾添加线程对象。

最后,我们使用join方法等待所有线程完成,并打印处理后的buffer的元素。

运行该代码,你将看到类似以下输出:

Thread 0: Processing element 0
Thread 1: Processing element 0
Thread 2: Processing element 0
Thread 3: Processing element 0
Thread 4: Processing element 0
Thread 0: Processing element 1
Thread 1: Processing element 1
Thread 2: Processing element 1
Thread 3: Processing element 1
Thread 4: Processing element 1
...
Processed buffer elements: 2 4 6 8 10 12 14 16 18 20

注意:在实际应用中,你可能还需要考虑其他细节,如线程安全的资源管理和异常处理等。这里的示例代码仅为了演示基本的多线程处理和互斥锁的使用

启动多个线程处理同一块buffer等所哟线程处理完成后释放buffer给出C++示例代码

原文地址: http://www.cveoy.top/t/topic/h7ZV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录