c++一个线程处理读写内存另外一个线程读上一个线程数据进行处理
以下是一个示例代码,演示了一个线程处理读写内存,另一个线程读取上一个线程的数据进行处理的过程:
#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函数等待数据准备好的通知后,读取共享数据并进行处理。
注意:在多线程编程中,需要小心处理共享数据的访问,以避免竞态条件等问题。在上面的示例代码中,使用了互斥锁和条件变量来确保线程之间的同步和通信
原文地址: https://www.cveoy.top/t/topic/hzOc 著作权归作者所有。请勿转载和采集!