c# - 如何最好地处理访问同一个互斥锁的多个任务?
问题描述
所以,我有多个锁定/释放同一个互斥锁的任务。读完后:
在持有互斥锁的同时,在同一个执行线程中执行的代码也可以获得和释放锁。但是,在释放锁之前,其他线程中执行的代码将无法获得锁。 1
我有点紧张。这应该意味着如果两个任务被安排在同一个线程上,它们可以访问同一个互斥锁?
对于上下文,我将有一个长时间运行的任务(可以被一个线程替换)和多个访问同一个互斥锁的小任务。
为了澄清,这就是我担心的:
线程 0:
Run Task 1: Lock mutex, do some work
Pause Task 1
Run Task 2: Lock mutex, do some work, release mutex
Run Task 1: keep doing work, release mutex
解决方案
这应该没问题,除非您在关键部分使用 async/await。这是因为在线程完成当前任务的执行之前,没有其他任务可以在线程上运行。
如果您在关键部分中使用等待,则可能会出现问题,因为就线程而言,“等待”可能会完成执行。简单的解决方案是不在关键部分中使用 await,这通常是一个好主意。如果您对此有一些具体问题,最好将其作为一个新问题发布。