我有多个线程大致同时启动 --- 所有线程都执行相同的代码路径。每个线程都需要将记录写入数据库中的表。如果该表不存在,则应创建它。显然,两个或多个线程可能会发现该表丢失,并尝试创建它。
确保此特定代码块仅由一个线程执行一次的首选方法是什么。
当我在 .NET 2.0 上用 C# 编写时,我假设该方法是框架/语言中立的。
最佳答案
像这样的东西应该有用...
private object lockObject = new object();
private void CreateTableIfNotPresent()
{
lock(lockObject)
{
// check for table presence and create it if necessary,
// all inside this block
}
}
让您的线程调用 CreateTableIfNotPresent
函数。 lock
block 将确保没有线程能够同时执行 block 内的代码,因此没有线程能够在另一个正在创建表时将表视为不存在。
关于c# - 只有多个线程之一执行特定代码路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1504653/