【问题标题】:Synchronizing primitives同步原语
【发布时间】:2014-03-31 22:04:23
【问题描述】:

在这个 PostSharp Multithreading 示例中,它在清单 6 中声明:

任何修改对象的方法都应该用 [WriteLock] 自定义属性。读取多个领域的方法 该对象还应该使用 [ReadLock] 自定义注释 属性。 (同步方法或属性getter是没用的 执行单次读取访问,因为操作总是 一致。)

同步执行单个读取访问的方法或属性 getter 是什么意思?这仅适用于字符串、int、float 等简单的原语,还是也适用于结构?或者这是一个误导性的陈述?

【问题讨论】:

  • 这有点误导 - 据我了解,假设阅读是安全的,单次阅读是可以的。如果您有对象,则其中一些值取决于他的其他值,当读取超过 1 个属性时 - 需要添加上述属性。但这是我.....
  • 据我了解,他们说他们的对象不是线程安全的,因此您必须自己使用读取器和写入器锁进行同步。

标签: c# multithreading synchronization postsharp


【解决方案1】:

它最有可能谈论“指针大小对象的操作是原子的” - 因此,如果您对引用进行单次读取或相应地调整大小的struct,则可以保证在没有锁的情况下具有一致的值。

一致意味着您不能从属性的旧值中获取一半指针,而从属性的新值中获取一半。请注意,这并不意味着最新值 - 如果您需要最新值,您仍然需要某种同步。

更多详细信息What operations are atomic in C#?

【讨论】:

    猜你喜欢
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多