esp32 arduino使用互斥锁
时间: 2024-09-19 11:13:23 浏览: 65
ESP32 Arduino 中的互斥锁,通常指的是`Semaphore`,这是一种同步机制,用于保护共享资源免受并发访问导致的数据竞争。当你需要控制多个线程或任务对某个资源的访问顺序时,可以使用互斥锁。
在Arduino库的`Semaphore`类中,你可以这样做:
```cpp
#include <Semaphore.h>
Semaphore sema(1); // 创建一个只允许一个线程进入的信号量
void task1() {
sema.take(); // 获取锁,如果此时没有其他任务持有锁,则继续
// 对资源的操作...
sema.release(); // 任务完成,释放锁给其他等待的任务
}
void task2() {
sema.take(); // 如果task1正在运行,这里会阻塞直到获取到锁
// 对资源的操作...
sema.release();
}
```
通过`sema.take()`获取锁,如果已存在占用者,则该操作会阻塞,直到锁被释放;当任务完成后通过`sema.release()`释放锁,让下一个等待的线程执行。这样就保证了在同一时间只有一个任务能访问共享资源,避免了数据冲突。
阅读全文