在我们的场景中,
如何在不锁定数据表的情况下实现上述目标(因为我们不希望生产者以任何方式等待)。
我们无法在我们的组织中使用.NET 4.0。
答案 0 :(得分:1)
在“生产者/消费者队列”部分的this page处使用监视器的生产者/消费者队列有一个很好的例子。为了同步对底层数据表的访问,您可以拥有一个使用者。
该页面可能是网上.NET中线程化的最佳资源。
答案 1 :(得分:0)
创建一个缓冲区,用于在处理数据时保存数据。
处理需要半秒钟,而你每秒可以获得8件物品......除非你有至少4个处理器,否则你会遇到问题。
为了安全起见,我需要使用至少两倍所需的缓冲区(16行),并确保可以使用硬件。
答案 2 :(得分:0)
没有灵丹妙药可以让你从多个线程访问DataTable
而不使用阻塞同步机制。我要做的是尽可能短的持有锁。请记住,修改数据表层次结构中的任何对象都需要锁定整个数据表。这是因为修改DataRow
上的列值可以更改父DataTable
内的内部索引结构。
所以我要做的是从制作人获得一个锁,添加一个新行,并释放锁。然后在conumser中,您将获得相同的锁,将DataRow
中包含的数据复制到单独的数据结构中,然后立即释放锁。现在,您可以在没有同步机制的情况下操作复制的数据,因为它是隔离的。完成操作后,您将再次获取锁定,将更改合并回DataRow
,然后释放锁定并重新开始此过程。