具有OLEDB数据库的多线程VB.Net

时间:2016-05-19 14:38:14

标签: vb.net multithreading oledb

在我开始之前,请原谅我,如果我最初没有这么说明的话!发布的代码太多了,所以我不得不解释我正在做的事情。

我正在开发一个使用OLEDB数据库连接的程序。

我正在将程序分成几类来完成处理的不同部分。将有一种方法在并行线程中设置不同的方法/类来执行不同的操作。每个线程完成后,它将写入数据库。数据库写入将在包含设置线程的方法的类中完成。

因此,ClassA_MethodA通过ClassA_MethodB设置线程,ClassA_MethodB将写入数据库。

根据各种参数,ClassA_MethodB将从ClassC_MethodA,ClassD_MethodA或ClassP_MethodA获取数据

ClassC_MethodA和ClassD_MethodA需要从OLEDB数据库中读取。由于可能正在运行的线程数,我不能为每个线程建立一个连接,因此所有需要使用共享连接,该连接作为参数传递给每个Class。到目前为止,当他们全部阅读时,这一切似乎都行得通。

问题是关于交易和/或锁定。

场景是每个线程(ClassA_MethodB)将写入一个唯一的表(没有并行写入) OR 将写入同一个表,但具有唯一值(例如,每个线程都有一个唯一的索引因此,两个线程没有机会尝试为相同的数据写入相同的数据或不同的值。

如果我在事务中包装每个线程的写入过程,如果ClassA_MethodA尝试在ClassA_MethodB写入时读取同一个表中的最新值,这是否会导致问题?

如果我使用:

 Monitor.Enter(tableWriteLock)
 'write my data
 Monitor.Exit(tableWriteLock)

我可以将锁的状态传递给ClassP_MethodA(例如),这样在写入时它不会尝试读取吗?

对于那里的专家来说,可能听起来像是一堆蠢货,但我知道我想要实现的目标 - 只是不能很好地表达出来!

0 个答案:

没有答案