我有以下代码......
private DbTransaction Transaction;
private readonly object TargetObject = new object();
public CustomDataReader GetDataReader(CustomCommand command)
{
DbDataReader reader = null;
lock (TargetObject) // what is the purpose of this lock?
{
DbCommand cmd = ProviderFactory.CreateCommand();
cmdConnection = Connection;
cmd.CommandText = command.Script;
cmd.Transaction = Transaction;
foreach (CommandParameter param in command.Parameters)
{
cmd.Parameters.Add(Parse(param));
}
OpenConnection();
if (Transaction == null)
{
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
else
{
reader = cmd.ExecuteReader();
}
}
return new CustomDataReader(reader);
}
我想了解lock(TargetObject)
的目的是什么?当我们在执行命令时使用事务时,为什么要使用该锁机制?
答案 0 :(得分:1)
这意味着在多线程环境中,锁定部分内的代码段一次只能在一个线程中执行。这与事务不同,这意味着对数据库的所有更改都会失败或一起成功。
来自MSDN:
lock关键字通过获取给定对象的互斥锁,执行语句,然后释放锁来将语句块标记为关键部分。