gpt4 book ai didi

c# - 多线程 'fixed'

转载 作者:太空狗 更新时间:2023-10-30 01:24:11 25 4
gpt4 key购买 nike

我有一个巨大的数组,两个线程正在对它们进行不同的分析:

  • 数据很大 - 不允许复制
  • 线程必须并发处理
  • 必须禁用边界检查以获得最佳性能

因此,每个线程看起来像这样:

unsafe void Thread(UInt16[] data)
{
fixed(UInt16* pData = data)
{
UInt16* pDataEnd = pData + data.Length;
for(UInt16* pCur=pData; pCur != pDataEnd; pCur++)
{
// do stuff
}
}
}

由于没有互斥量(有意),我想知道在并行线程上对相同数据使用两个 fixed 语句是否安全?大概第二个 fixed 应该返回与第一个相同的指针,因为内存已经被固定了……当第一个完成时,它不会真正取消固定内存,因为第二个 fixed() 仍然处于事件状态。有没有人试过这个场景?

最佳答案

根据“CLR via C#”,这样做是安全的。

编译器在 pData 变量上(在指针上,而不是在数组实例上)设置了一个“固定”标志。

所以多重/递归使用应该没问题。

关于c# - 多线程 'fixed',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10129828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com