0

我目前正在使用几种方法来实现一个单例类。每种方法都使用相同的私有字段,该字段实际上是与数据库的连接。在每种方法中,读者都试图敞开心扉。如您所见,这是在整个应用程序范围内共享的单个连接。如果您在阅读器已经打开时尝试在 Ado.Net 中打开阅读器连接,则会发生异常。如果您在打开阅读器后忘记关闭阅读器,则可以打开此案例,但在我的案例中会发生这种情况,因为我使用多个线程来做一些事情。

我的问题是:我必须为每个方法实现不同的互斥对象还是为所有方法共享一个对象就足够了?

我知道单例很少有好的模式。我也知道共享连接不是一个好习惯,但请记住我的项目是一个 winforms 项目并且被认为是遗留项目。我的客户也不想为重新设计应用程序付费。我只想知道在这种情况下应该如何处理互斥锁。

非常感谢您的宝贵时间。

4

2 回答 2

2

你需要一个互斥锁。如果您有多个互斥锁控制单个共享资源(在这种情况下为数据库连接),那么多个线程可以一次访问它,这破坏了互斥锁的意义。

于 2012-05-13T04:55:55.020 回答
0

您需要使用同一个对象锁定所有方法,以便对数据库的每次调用都将一一完成。

您确定不可能在每种方法中创建连接并关闭它吗?我认为这比尝试用锁来修复行为要容易:S

于 2012-05-13T04:54:38.977 回答