使用c#

时间:2018-03-06 13:10:49

标签: c# sql-server visual-studio mutex

我有三个控制台项目。

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

我们也在使用实体框架

1 个答案:

答案 0 :(得分:0)

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

在创建信号时,只需将名称设置为信号量:

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

并一如既往地使用它:

void DoSomeWithDataBase() {
_semaphore.WaitOne();
DoWorkInDB();
_semaphore.Release(); }