c# - 防止线程不必要地执行 CoSTLy 任务

标签 c# multithreading concurrency locking

我想通过以下方式保护对资源的访问:

  • 所有线程都可以并发读取,更新期间除外(如果更新不是原子的)。
  • 只能给一个线程分配更新任务,直到下一次 需要更新。

这似乎是一个使用适当的 lock 或可能使所有操作成为原子操作的简单问题,但我认为事实并非如此。

如果我只有一个用于更新的写锁(即 ReaderWriterLockSlim),或者使用非锁定代码,没有什么可以阻止多个线程运行更新过程(或排队等待这样做) ).如果我在检查资源是否需要更新之前使用锁定来阻塞线程,它们将无法并发执行,但会被有效地序列化。

我可以让特定的线程执行资源的所有检查和更新,并利用类似 ManualResetEvent 的东西来暂停其他读取线程,直到更新完成。 (或者如果更新是作为原子操作实现的,只需满足于具有特定的更新线程。)

但是,我不确定最佳实践,我想问一下您是否认为可以用更少的努力来满足这些要求,或者我的任何假设是否有偏差。

最佳答案

我认为您正在寻找 ReaderWriterLockSlim。使用独占锁模式写。

关于c# - 防止线程不必要地执行 CoSTLy 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37943872/

相关文章:

c# - 如何在谷歌日历中创建 "recurData"?

javascript - 在 Node.js 中并行化任务

java - Java thread.start 可以重新排序吗?

java - 将异常从一个线程重新抛出到另一个线程

c# - WCF wsHttpBinding 客户端证书身份验证,无需在客户端中使用存储

C# 启用/禁用 Windows 7/Windows 7 嵌入式防火墙

c# - 在 foreach/for 中构建 where 子句的延迟查询

c# - 在 C# 中实现进度条

c# - 是否有类似于 C# 中的锁的构造,它会跳过代码块而不是阻塞?

java - ReentrantLock 同步getters和setters