代码之家  ›  专栏  ›  技术社区  ›  Luka Rahne

互斥机制

  •  0
  • Luka Rahne  · 技术社区  · 14 年前

    对于这种任务,C/NET中最合适的mutex alg是什么。

    • 许多阅读
    • 碰撞概率很低(碰撞概率重要吗?)。

    我在考虑简单锁或ReaderWriterLockSlim,但我不确定该选择哪一个,以及是否有更好的方法来完成这项任务。

    谢谢。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Brian Gideon    14 年前

    您将需要执行自己的基准测试。我想你会发现在大多数情况下 lock ReaderWriterLockSlim 即使大多数访问都是只读的。原因是维修锁的开销要高得多。我做基准测试已经有一段时间了,但我相信 ReadWriterLockSlim 比一辆汽车慢5倍 . 显然,保持锁的时间越长,开销的总体影响就越小。在某个时候,它不再是主导因素。里程数会因情况而异,所以在这里我可以给出最好的建议。

        2
  •  1
  •   We B Martians    12 年前

    如果需要访问的多个实体之间的冲突很少发生,请考虑以下方法:

    • 获取,带锁(互斥。。。相关资料的复印件
      • 确保至少有一个复制项足以进行比较 对照原件,以检测是否有变化 发生
    • 再次获取锁
    • 如果不是,应用你的结果 如果是这样的话,放弃你的结果,重新获取副本并重新开始
      • 松开锁

    例如:

    1. 锁定支票账户和储蓄账户;获取余额和最新交易时间的副本;解锁
    2. 计算更改。。。例如,将5美元从储蓄转为支票

    这样做的目的是,如果有任何活动也需要锁定,但不影响代码的结果(无可否认,对于本例来说,该示例不是一个好例子),那么您就没有阻止其他代码的执行。

        3
  •  0
  •   dmeister    14 年前

    我不知道ReaderWriterLockSlim特别,但读写互斥可以使用 如果允许多个读取并行访问关键部分。如果这个假设是真的,这取决于我们的用例。这种情况经常发生,但并不总是如此。

    在这种情况下,“碰撞概率”是什么意思?两个线程同时尝试访问临界部分的概率是多少?