我有一个表,其模式部分如下所示:
SubId列是PK并且是聚簇索引。我有一个C#(使用实体框架)应用程序,它将(仅插入)行插入此表。该应用程序是多线程的,我通常有四个线程一次运行,在这个表中插入行。有时候,我会遇到如下僵局:
我真的很困惑。显然我陷入僵局,但我不明白。我正在严格执行插入操作,并且我的应用程序之外没有其他进程访问此表。
答案 0 :(得分:0)
即使使用插入,也会出现死锁。例如,假设您有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!
由于您没有提供有关您的表格和实际陈述的任何详细信息,因此很难说是否是这种情况,但我希望它能指出您正确的方向。