假设我正在从多个线程访问一个DataTable
。 如果我想要访问特定行,我怀疑我需要锁定该操作(我可能对此感到困惑,但至少我知道这样我是安全的):
// this is a strongly-typed table
OrdersRow row = null;
lock (orderTable.Rows.SyncRoot) {
row = orderTable.FindByOrderId(myOrderId);
}
但是,如果我想要更新那一行,我应该再次锁定表格(或者更准确地说,是表格的Rows.SyncRoot
对象),还是仅仅锁定那一行就可以了?
lock
机制的工作原理... 我确实意识到锁定不会对对象做任何事情;我想我本可以更好地表达我的问题,比如说“我需要按行或按表同步更新操作吗?”无论如何,现在对我来说很清楚,我必须同步整个表中任何行的更新——无论是通过锁定表还是专用的“表锁”(在这种情况下,我认为Rows.SyncRoot
对象可以很好地发挥这个作用)。 - Dan Tao