我有一个巨大的数组,两个线程正在对它进行不同的分析:
- 数据很大 - 不允许复制
- 线程必须同时处理
- 必须禁用边界检查以获得最佳性能
因此,每个线程看起来像这样:
unsafe void Thread(UInt16[] data)
{
fixed(UInt16* pData = data)
{
UInt16* pDataEnd = pData + data.Length;
for(UInt16* pCur=pData; pCur != pDataEnd; pCur++)
{
// do stuff
}
}
}
由于没有互斥锁(故意),我想知道在并行线程上的相同数据上使用两个固定语句是否安全?大概第二个固定应该返回与第一个相同的指针,因为内存已经固定......当第一个完成时,它不会真正取消固定内存,因为第二个固定()仍然处于活动状态......有没有人试过这个设想?