여러 스레드에서 DataTable
에 액세스한다고 가정합니다. 내가 특정 행에 액세스하려면, 나는 그 작업을 잠글 필요가 의심 (나는 이것에 대해 잘못 될 수있다, 그러나 적어도 나는 이런 식으로 나는 안전 해요 알고) : 나는 경우, 다음DataRow를 업데이트하는 경우 전체 DataTable 또는 DataRow를 잠급니다.
// this is a strongly-typed table
OrdersRow row = null;
lock (orderTable.Rows.SyncRoot) {
row = orderTable.FindByOrderId(myOrderId);
}
하지만를 업데이트 그 행을, 내가 테이블을 (또는 오히려, 테이블의 Rows.SyncRoot
개체) 다시 잠 그거나, 단순히 행을 잠글 수 있습니까?
매우 통찰력있는 대답, 나는'lock' 메커니즘이 어떻게 작동 하는지를 지적해야 할 필요성을 느낀 이유를 알 수있다. 나는 잠금이 객체에 아무 것도하지 않는다는 것을 깨달았다. 내 질문에 "내가 행 단위 또는 테이블 단위로 업데이트 작업을 동기화해야합니까?"라고 말하면서 더 나은 방법이라고 생각합니다. 어쨌든이 시점에서 필자는 테이블 또는 전용 "테이블 잠금"을 잠그 든 (모든 경우에 행을 생각하면) 전체 테이블에서 * 모든 * 행에 대한 업데이트를 동기화해야한다는 것이 확실합니다. SyncRoot' 객체는 실제로 그 목적을 잘 수행합니다). –