我有三个控制台项目。
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
我们也在使用实体框架
答案 0 :(得分:0)
您需要进程间同步对象,而互斥锁并不适合它。 您可以使用命名的信号量。当它被创建时,它可以被系统中的任何进程使用(嗯,经过许可可能会很棘手,但幸运的是它会马上工作)。
在创建信号时,只需将名称设置为信号量:
Semaphore _semaphore = new Semaphore(1,1, "MyNamedSemapthoreName");
并一如既往地使用它:
void DoSomeWithDataBase() {
_semaphore.WaitOne();
DoWorkInDB();
_semaphore.Release(); }