【发布时间】:2011-04-14 09:07:56
【问题描述】:
我有一个以数据库表作为参数的线程,我遇到了一个问题,我无法同时写入该数据库表。
TMyThread 的 1 个实例可以有一个 'Member' 的 db 表,而另一个可能有 'Staff' 但是可能存在两个线程打开同一个表的情况。
因此,我需要将代码包装在关键部分(或类似部分)中,但我不想要一些像 (fMemberTable, fStaffTable) 这样的关键部分之类的脏东西...
begin
if fDBTable = 'Member' then
fMemberTable.Enter
else if fDbTable = 'Staff' then
....
我们有 8 张桌子,所以会很乱 有什么办法吗
TCricalSection(fMemberTable).Enter; 还是某种易于“扩展”和使用的方法?
围绕函数的一个关键部分没有意义,因为我不想阻止其他表......
【问题讨论】:
-
通常数据库非常擅长管理并发性。你用的是什么数据库?有办法在数据库层而不是在应用程序层进行管理。
-
使用来自 Aidaim 的 Accuracer - 支持这一点,但我们发现了问题,已经发送了一封包含示例代码的电子邮件以支持。我想要一个备用计划,以防他们需要一周的时间来修复它。 (他们的问题不是每个表,而是每个数据库。但他们会支持它)
标签: multithreading delphi thread-safety critical-section