C++实现一个线程从广播读数据 一个线程进行位置匹配
时间: 2024-04-10 13:33:08 浏览: 140
可以使用C++的多线程库来实现这个功能,例如使用std::thread和std::mutex。
下面是一个简单的示例代码:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
bool dataReady = false;
int data = 0;
void broadcast()
{
// 模拟广播读数据的过程
std::this_thread::sleep_for(std::chrono::seconds(2));
std::lock_guard<std::mutex> lock(mtx);
data = 42;
dataReady = true;
}
void matchPosition()
{
while (true) {
std::lock_guard<std::mutex> lock(mtx);
if (dataReady) {
// 执行位置匹配操作
std::cout << "匹配到位置: " << data << std::endl;
dataReady = false; // 重置标志位
}
}
}
int main()
{
std::thread t1(broadcast);
std::thread t2(matchPosition);
t1.join();
t2.join();
return 0;
}
```
在这个示例中,我们创建了两个线程t1和t2。t1负责模拟广播读取数据的过程,并将数据保存在共享变量`data`中。一旦数据准备好,就设置`dataReady`标志位为true。t2则负责不断检查`dataReady`标志位,如果为true,则执行位置匹配操作并输出结果。
在主函数中,我们使用`join()`函数等待两个线程的结束。
注意,在多线程中使用共享变量时,需要使用互斥锁(`std::mutex`)来保护共享数据的访问,以防止并发访问导致的数据竞争问题。在示例代码中,我们使用了`std::lock_guard`来自动管理锁的加锁和解锁操作,以确保锁的正确使用。
阅读全文