相关疑难解决方法(0)

原子x86指令的对齐要求

Microsoft提供了InterlockedCompareExchange执行原子比较和交换操作的功能.还有一个内在的._InterlockedCompareExchange

在x86上,这些是使用lock cmpxchg指令实现的.

但是,通过阅读这三种方法的文档,他们似乎并不同意对齐要求.

英特尔的参考手册没有说明对齐(除了如果启用了对齐检查并且进行了未对齐的内存引用,则会生成异常)

我也查找了lock前缀,具体说明了这一点

锁定前缀的完整性不会受到内存领域的对齐方式.

(强调我的)

所以英特尔似乎认为对齐是无关紧要的.无论如何,这个操作都是原子的.

_InterlockedCompareExchange固有的文档也只字未提对齐,但是InterlockedCompareExchange 功能指出,

该函数的参数必须在32位边界上对齐; 否则,该函数将在多处理器x86系统和任何非x86系统上表现不可预测.

什么给出了什么?对齐要求是否InterlockedCompareExchange只是为了确保该功能即使在cmpxchg指令不可用的486之前的CPU上也能正常工作?这看起来很可能基于上述信息,但在依赖它之前我想确定一下.:)

或者ISA需要对齐以保证原子性,我只是在英特尔的参考手册中找错了地方?

x86 winapi atomic interlocked memory-alignment

37
推荐指数
2
解决办法
5202
查看次数

用于.NET的无锁和线程安全IList <T>

是否存在实现IList的无锁且线程安全的数据结构?

当然,无锁是指一种实现,它不使用.NET中的锁定原语,而是使用互锁操作/原子操作来实现线程安全......没有一个,显然在并发数据结构下......

有没有人见过一个漂浮?

我见过一个用氨基-cbbs实现的java 文件,名为LockFreeVector但到目前为止还没有用于.NET.有任何想法吗?

.net multithreading ilist structure lock-free

14
推荐指数
2
解决办法
3784
查看次数

C#atomicity:在x64平台上分配int与long

我正在查看http://msdn.microsoft.com/en-us/library/aa691278(VS.71).aspx,其中说int的读写是原子的,而long的读写可能不是.64位平台真的如此吗?是不是IntPtr.Size == 64位还是长?我错过了什么或语言规格不够充实?

这里也有更多想法:http: //philosopherdeveloper.wordpress.com/2011/02/08/beware-assignment-atomic-assignment/

.net c# multithreading pointers thread-safety

6
推荐指数
1
解决办法
1096
查看次数