ros 代码加局部锁
时间: 2024-10-16 15:14:02 浏览: 5
在Robot Operating System (ROS) 中,添加局部锁(也称为线程锁或互斥量)是为了控制对共享资源的访问,防止多个线程同时修改数据,导致数据不一致或程序错误。当需要保护特定代码块的执行顺序或并发访问时,可以使用ROS中的`std::mutex`或者`boost::mutex`。
以下是一个简单的例子,展示了如何在ROS节点(Nodelet)中使用局部锁:
```cpp
#include <ros/ros.h>
#include <thread>
class MySharedClass {
public:
std::mutex mtx; // 创建一个互斥锁
void doSomething() {
std::lock_guard<std::mutex> lock(mtx); // 使用锁定范围自动管理锁的获取和释放
// 这里是受保护的操作
ROS_INFO("Doing something...");
}
};
int main(int argc, char *argv[]) {
ros::init(argc, argv, "my_nodelet");
MySharedClass sharedObj;
// 在两个线程中并行运行doSomething
std::thread t1(&MySharedClass::doSomething, &sharedObj);
std::thread t2(&MySharedClass::doSomething, &sharedObj);
t1.join();
t2.join();
return 0;
}
```
在这个例子中,`doSomething`函数通过`lock_guard`自动获取并在完成操作后释放锁,保证了在同一时间只有一个线程能够执行这个函数内的代码。
阅读全文