首页 > 解决方案 > 如何最好地处理访问同一个互斥锁的多个任务?

问题描述

所以,我有多个锁定/释放同一个互斥锁的任务。读完后:

在持有互斥锁的同时,在同一个执行线程中执行的代码也可以获得和释放锁。但是,在释放锁之前,其他线程中执行的代码将无法获得锁。 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

标签: c#.netasynchronousconcurrency

解决方案


这应该没问题,除非您在关键部分使用 async/await。这是因为在线程完成当前任务的执行之前,没有其他任务可以在线程上运行。

如果您在关键部分中使用等待,则可能会出现问题,因为就线程而言,“等待”可能会完成执行。简单的解决方案是不在关键部分中使用 await,这通常是一个好主意。如果您对此有一些具体问题,最好将其作为一个新问题发布。


推荐阅读