相关疑难解决方法(0)

许多读者,一位作家 - 是否有可能避免锁定?

假设你有一个内存中的字符串列表,以及一个多线程系统,有许多读者但只有一个编写器线程.

一般来说,是否可以在C#中实现这种系统而不使用锁?实现是否会对线程如何交互做出任何假设(或者限制它们可以做什么,何时做)?

c# multithreading

18
推荐指数
4
解决办法
5795
查看次数

InterlockedExchange和内存对齐

我很困惑,微软表示InterlockedExchange需要内存对齐,但是,英特尔文档说LOCK不需要内存对齐.我错过了什么,或者其他什么?谢谢

来自Microsoft MSDN Library

Platform SDK:DLL,进程和线程InterlockedExchange

Target参数指向的变量必须在32位边界上对齐 ; 否则,此函数将在多处理器x86系统和任何非x86系统上出现不可预测的行为.

来自英特尔软件开发人员手册;

  • LOCK指令在执行伴随指令期间使处理器的LOCK#信号有效(将指令转换为原子指令).在多处理器环境中,LOCK#信号确保处理器在信号被置位时独占使用任何共享存储器.

    LOCK前缀的完整性不受存储器字段对齐的影响. 对于任意未对齐的字段,观察到存储器锁定.

  • P6中的内存排序和更新的处理器系列

    锁定的指令有一个总订单.

  • 软件控制总线锁定

    总线锁的完整性不受存储器字段对齐的影响.遵循LOCK语义以获得更新整个操作数所需的多个总线周期.但是,建议锁定访问在其自然边界上对齐,以获得更好的系统性能:•8位访问的任何边界(锁定或其他).•锁定字访问的16位边界.•锁定双字访问的32位边界.•锁定四字访问的64位边界.

x86 winapi multithreading interlocked

8
推荐指数
2
解决办法
2331
查看次数

标签 统计

multithreading ×2

c# ×1

interlocked ×1

winapi ×1

x86 ×1