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 语句将立即执行。

Linux man page

描述互斥锁和信号量对象的参考文献

构造

class mutex.Mutex

创建一个未锁定的互斥锁对象。

方法

release() None

解锁互斥锁。

test() bool

尝试以非阻塞方式获取互斥锁。成功返回 True,失败返回 False

您也可以使用 with 以阻塞方式获取互斥锁。