Tag: 死锁

使用Windbg的!clrstack命令调试死锁

当我发出clrstack命令时,我得到了以下输出。 它是一个阻塞线程的callstack,它拥有一个死锁并导致死锁。 这是它的确切目的吗? 它是否有任何其他目的(没有任何参数)。 我在哪里可以获得更多信息? !clrstack OS Thread Id: 0x1b2c (6956) ESP EIP 0012f370 7c90e514 [HelperMethodFrame: 0012f370] System.Threading.Thread.SleepInternal(Int32) 0012f3c4 79299275 System.Threading.Thread.Sleep(Int32) 0012f3c8 00e0030f testlock.LockTest.Test() 0012f420 00e00146 testlock.Program.Main(System.String[]) 0012f69c 79e71b4c [GCFrame: 0012f69c]

检测C#应用程序中的死锁

可能重复: C#/ .NET分析工具查找竞争条件/死锁 我正在调试一个应用程序,我怀疑它正在陷入僵局并挂起。 但是,这只会每隔几天发生一次,并且它永远不会发生在我的计算机上,因此我无法将调试器挂钩。 是否有任何实用程序或方法可用于查询正在运行的应用程序并找出哪些方法/锁定/它是什么死锁? 更新:通常应用程序在客户位置运行,我无法访问该计算机,并且我不太愿意让他们安装大量软件。

在ASP.NET MVC应用程序中锁定一个全局对象时是否可能出现死锁?

对于锁定,我使用的是一个对我的应用程序来说是全局的静态对象: public class MvcApplication : System.Web.HttpApplication { public static readonly object AppLock = new object(); … } 用它来锁定代码: lock(MvcApplication.AppLock) { … } 我们暂时不要考虑性能影响。 我能100%确定在这种情况下我会避免死锁吗?

锁定aqcuired并进一步尝试锁定不阻塞:C#锁是否重入?

我已经编写了一个测试,我认为应该是一个有效的死锁案例。 看来,一旦一个类的实例获取了lock ,该实例就不再需要重新获取lock ,即使我明确地尝试调用另一个应该再次lock方法。 这是class级: internal class Tester { private readonly object _sync = new object(); public Tester() { } public void TestLock() { lock (_sync) { for (int i = 0; i < 10; i++) { Deadlock(i); } } } private void Deadlock(int i) { lock (_sync) { Trace.WriteLine(i + " no deadlock!"); } […]

更新并插入创建死锁的查询

我将尽可能详细地解释我的问题,我将不胜感激任何帮助/建议。 我的问题是由两个查询(一次插入和一次更新)引起的死锁。 我正在使用MS-SQL server 2008 我有两个使用相同数据库的应用程序: Web应用程序(在每个请求上通过调用存储过程在Impressions表中插入多个记录) Windows服务(计算前一分钟在一分钟,每分钟内完成的所有展示次数,并在通过存储过程计算的每个展示次数上设置一个标记) Web应用程序在不使用事务的情况下插入展示记录,而Windows服务应用程序在使用IsolationLevel.ReadUncommitted事务时计算展示次数。 Windows服务应用程序中的存储过程执行如下操作: Windows服务存储过程: 循环通过将isCalculated标志设置为false并且日期<@now的所有展示,增加连接到展示表的另一个表中的计数器和其他数据,并在具有日期<@now的展示中将isCalculated标志设置为true。 因为这个存储过程非常大,没有必要粘贴它,这里是proc的缩短代码片段: DECLARE @nowTime datetime = convert(datetime, @now, 21) DECLARE dailyCursor CURSOR FOR SELECT Daily.dailyId, Daily.spentDaily, Daily.impressionsCountCache , SUM(Impressions.amountCharged) as sumCharged, COUNT(Impressions.impressionId) as countImpressions FROM Daily INNER JOIN Impressions on Impressions.dailyId = Daily.dailyId WHERE Impressions.isCharged=0 AND Impressions.showTime < @nowTime AND Daily.isActive = 1 GROUP […]

.net中的死锁示例?

任何人都可以在c#中提供一个简单的死锁示例代码吗? 请告诉您在C#代码示例中找到死锁的最简单方法。 (可能是在给定的示例代码中检测死锁的工具。) 注意:我有VS 2008

如何在C#中使用ADO获得高效的Sql Server死锁处理?

我有一个类’数据库’,作为ADO.net的包装器。 例如,当我需要执行一个过程时,我调用Database.ExecuteProcedure(procedureName,parametersAndItsValues)。 我们遇到了SQL Server 2000中死锁情况的严重问题。我们团队的一部分正在处理sql代码和事务以最小化这些事件,但我正在考虑使这个数据库类能够抵御死锁情况。 我们希望死锁受害者可能在经过一段时间的延迟后重试,但我不知道是否可能。 以下是我们使用的方法的代码: public int ExecuteQuery(string query) { int rows = 0; try { Command.Connection = Connection; Command.CommandType = CommandType.Text; if(DatabaseType != enumDatabaseType.ORACLE) Command.CommandText = query; else Command.CommandText =”BEGIN ” + query + ” END;”; if (DatabaseType != enumDatabaseType.SQLCOMPACT) Command.CommandTimeout = Connection.ConnectionTimeout; if (Connection.State == ConnectionState.Closed) Connection.Open(); rows = Command.ExecuteNonQuery(); } […]

.NET 4.0和可怕的OnUserPreferenceChanged Hang

我一直受到可怕的OnUserPreferenceChanged Hang的困扰,Ivan Krivyakov在这里很好地提到了这里: http://ikriv.com/en/prog/info/dotnet/MysteriousHang.html#BeginInvokeDance 我刚回来时发布了一个问题,当时我最初遇到问题: 又一个C#死锁调试问题 我以为我已经通过移除一个由UI线程构建的Control来解决它,但过了一会儿它再次出现(可能永远不会离开……)。 我们一直在使用.NET 3.5,据我所知使用的是CLR 2.0。 最近,applciation已升级为使用.NET 4.0 Client Profile / CLR 4.0。 此外,我们已从Infragistics WinForms 10.1升级到10.3。 唯一的另一个区别是以前的版本是混淆的……有没有人遇到过混淆和挂起的问题? 我已经再次尝试摆脱任何应用程序挂起一次又一次,但不同寻常的是,我无法在最新版本中重现挂起(使用.NET 4.0)。 使用Ivan Krivyakov的方便的Freezer应用程序(请参阅他的文章),可以根据请求触发WM_SETTINGCHANGE消息,以便在以前的版本(使用.NET 3.5)中重现。 可能是我有点希望问题已经从它自己的消失中消失了,但是有人知道CLR从2.0到4.0是否有任何变化会导致这种情况发生? ————————————————– – -解 – – – – – – – – – – – – – – – – – – – – – – – —- 因此,在测试应用程序的变体后,例如CLR […]