在c#中使用互斥锁避免数据库死锁

问题描述 投票:0回答:1

我有三个控制台项目。

MAIN.EXE

Secondary1.exe

Secondary2.exe

现在,main.exe在需要时调用secondary1和secondary2 exes,并在数据库中为它们提供表的id

主exe不会停止,但secondary1.exe和secondary2.exe在各自更新后停止

Main.exe创建secondary1.exe和secondary2.exe的多个实例

Main.exe还会在同一个表中更新数据库,但不会更新单行,多行。

当多个exes试图更新sql server,一个表时,我们正面临一个sql server死锁问题。

我们被告知在c#中使用互斥锁来解决这个问题。

知道如何在资源是数据库时这样做

抱歉,无法提供任何代码,因为我无法通过三个完全独立的.exes

我们也在使用实体框架

c# sql-server visual-studio mutex
1个回答
0
投票

您需要进程间同步对象,而互斥锁并不适合它。您可以使用命名的信号量。当它被创建时,它可以被系统中的任何进程使用(嗯,经过许可它可能很棘手,但幸运的是它会马上工作)。

只需在创建信号时将其命名为信号量:

Semaphore _semaphore = new Semaphore(1,1, "MyNamedSemapthoreName");

并一如既往地使用它:

void DoSomeWithDataBase() {
_semaphore.WaitOne();
DoWorkInDB();
_semaphore.Release(); }
© www.soinside.com 2019 - 2024. All rights reserved.