以下是一个示例代码,演示了一个线程处理读写内存,另一个线程读取上一个线程的数据进行处理的过程:

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

std::mutex mtx;  // 互斥锁
std::condition_variable cv;  // 条件变量
bool dataReady = false;  // 数据是否准备好的标志
int sharedData = 0;  // 共享数据

// 写入数据的线程函数
void writerThread() {
    std::cout << "Writer thread started." << std::endl;
    
    // 模拟写入数据的过程
    std::this_thread::sleep_for(std::chrono::seconds(2));
    
    // 写入共享数据
    std::lock_guard<std::mutex> lock(mtx);
    sharedData = 42;
    dataReady = true;
    
    // 通知等待的线程数据已准备好
    cv.notify_one();
    
    std::cout << "Writer thread finished." << std::endl;
}

// 读取数据的线程函数
void readerThread() {
    std::cout << "Reader thread started." << std::endl;
    
    // 等待数据准备好
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock, [] { return dataReady; });
    
    // 读取共享数据
    int data = sharedData;
    
    std::cout << "Reader thread got data: " << data << std::endl;
    
    std::cout << "Reader thread finished." << std::endl;
}

int main() {
    std::thread writer(writerThread);
    std::thread reader(readerThread);
    
    writer.join();
    reader.join();
    
    return 0;
}

在上面的示例代码中,writerThread函数模拟写入数据的过程,在写入数据之后,通过互斥锁和条件变量通知readerThread线程数据已准备好。readerThread函数等待数据准备好的通知后,读取共享数据并进行处理。

注意:在多线程编程中,需要小心处理共享数据的访问,以避免竞态条件等问题。在上面的示例代码中,使用了互斥锁和条件变量来确保线程之间的同步和通信

c++一个线程处理读写内存另外一个线程读上一个线程数据进行处理

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

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