mutex
— 互斥锁模块¶
mutex
模块用于创建互斥锁。
class Mutex – 互斥锁对象¶
互斥锁是一种对象,使执行线程能够保护代码的关键部分免受重入,或者暂时保护关键数据集不被其他线程更新。术语“mutex”源于互斥排他的概念。互斥锁通常提供三种方法:
lock() (POSIX pthread_mutex_lock): 等待互斥锁空闲,然后锁定它
unlock() (POSIX pthread_mutex_unlock): 立即返回。解锁互斥锁。
test() (POSIX pthread_mutex_trylock): 立即返回。测试它是否被锁定。
在这个实现中,通过上下文管理器来控制锁定和解锁。
在MicroPython环境中,互斥锁提供了一种机制,其中中断服务例程(ISR)可以测试主循环在中断发生时是否使用了关键变量,如果是,则避免修改这些变量。典型用法:
import pyb, mutex
mutex = mutex.Mutex()
data_ready = False
def callback(): # Timer or interrupt callback
global data_ready
if mutex.test():
data_ready = True
# Update critical variables
mutex.release()
else:
# defer any update
# Associate callback with device (pin or timer)
while True:
# code
if data_ready:
with mutex:
data_ready = False
# Access critical variables
# more code
注意,由于没有其他进程在相同的互斥锁实例上运行一个 with 块,因此 with 语句将立即执行。
描述互斥锁和信号量对象的参考文献