C++ 线程间数据共享:一个线程读取另一个线程的值
在 C++ 中,可以使用 std::thread 来创建线程。以下是一个示例代码,其中一个线程读取另一个线程的值:
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
int value = 0;
void reader_thread()
{
std::this_thread::sleep_for(std::chrono::seconds(2)); // 等待2秒,使得writer_thread有足够的时间改变value的值
std::lock_guard<std::mutex> lock(mtx); // 加锁保证线程安全
std::cout << 'Value read by reader_thread: ' << value << std::endl;
}
void writer_thread()
{
std::lock_guard<std::mutex> lock(mtx); // 加锁保证线程安全
value = 42;
}
int main()
{
std::thread reader(reader_thread);
std::thread writer(writer_thread);
reader.join();
writer.join();
return 0;
}
在上述代码中,创建了两个线程:reader_thread 和 writer_thread。reader_thread 线程在 2 秒后读取 value 的值,并输出到控制台。writer_thread 线程立即将 value 的值设置为 42。
注意,在访问共享数据 value 之前,使用了 std::mutex 和 std::lock_guard 来保证线程安全。这样可以避免多个线程同时读写 value 的问题。
在主函数中,分别调用了 reader.join() 和 writer.join() 来等待两个线程执行完毕。
输出结果可能为:
Value read by reader_thread: 42
原文地址: https://www.cveoy.top/t/topic/o1db 著作权归作者所有。请勿转载和采集!