我有一个表,其架构部分如下所示:
SubId 列是 PK 并且是聚集索引。我有一个 C#(使用实体框架)应用程序,它将(仅插入)行插入到此表中。该应用程序是多线程的,我通常有四个线程同时运行,将行插入到该表中。有时,我会遇到如下所示的死锁:
我真的很困惑。显然我遇到了僵局,但我不知道如何。我严格执行插入操作,并且我的应用程序之外没有其他进程正在访问此表。
我有一个表,其架构部分如下所示:
SubId 列是 PK 并且是聚集索引。我有一个 C#(使用实体框架)应用程序,它将(仅插入)行插入到此表中。该应用程序是多线程的,我通常有四个线程同时运行,将行插入到该表中。有时,我会遇到如下所示的死锁:
我真的很困惑。显然我遇到了僵局,但我不知道如何。我严格执行插入操作,并且我的应用程序之外没有其他进程正在访问此表。
即使使用插入,您也会遇到死锁。例如,假设你有CREATE TABLE test23 (id INT NOT NULL PRIMARY KEY);
然后
--Process 1 :
--1
BEGIN TRANSACTION;
INSERT INTO test23(id) VALUES (1);
-- Process 2:
--2
BEGIN TRANSACTION;
INSERT INTO test23(id) VALUES (2);
--Process 1 :
--3
INSERT INTO test23(id) VALUES (2);
-- Process 2:
--4
INSERT INTO test23(id) VALUES (1);
--Deadlock!
由于您没有提供有关您的表格和实际陈述的任何详细信息,因此很难说是否是这种情况,但我希望它能为您指明正确的方向。