当前位置:  开发笔记 > 编程语言 > 正文

如何在x86中执行Int64的Interlocked.CompareExchange

如何解决《如何在x86中执行Int64的Interlocked.CompareExchange》经验,为你挑选了0个好方法。

当在x86上运行的算法上尝试调试随机40x性能下降时,我几乎疯了,因为算法大量使用Inter64.CompareExchange和Int64.

我终于隔离了这个问题,只有当所说的Int64不是8字节对齐时才会发生.

无论我如何在StructLayout中显式定位字段,它都依赖于堆上外部对象的基地址.在x86上,基地址将是4字节对齐或8字节对齐.

我想到定义一个12字节的结构并根据对齐将Int64设置为偏移0或偏移4,但这有点像hacky.

c#中有一个很好的做法,用于在x86中对Int64执行互锁操作,以确保正确对齐吗?


编辑

代码可以在这里找到:https: //github.com/akkadotnet/akka.net/pull/1569#discussion-diff-47997213R520

它是一个基于Clr ThreadPool的线程池实现.问题是关于将自定义信号量的状态存储在8字节结构中并使用InterlockedCompareExchange64进行修改.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有