我用python和Raspian在树莓派。我有一个外设,它使我的中断处理程序功能运行。有时,当对第一个中断的响应尚未完成时,中断被触发。所以我添加了一个变量,它在中断函数进入时设置,在退出时重置,如果进入函数后,它发现锁已设置,它将立即退出。在
有没有更规范的方法来处理这种事情。在
def IrqHandler(self, channel):
if self.lockout: return
self.lockout = True;
# do stuff
self.lockout = False;
Tags:
你可以用博格模式来搭配。这样你就可以有几个中断实例关注一个状态。 还有一个叫做单例的,但这里有一个关于这两个的讨论。 Why is the Borg pattern better than the Singleton pattern in Python
如果两次调用
IrqHandler
足够近的距离,则存在竞争条件,两个调用都可以将self.lockout
视为False
,并继续将其设置为True
等threading
模块有一个Lock()
对象。通常(默认)这是用来阻止线程直到释放锁。这意味着所有中断都将排队并轮流运行处理程序。在您还可以创建一个
Lock(False)
,如果已经获得锁,它将只返回False
。这是你的近处相关问题 更多 >
编程相关推荐