2 つのスレッドによって異なる方法で分析されている巨大な配列があります。
- データが大きい - コピー不可
- スレッドは同時に処理する必要があります
- 最大のパフォーマンスを得るには、境界チェックを無効にする必要があります
したがって、各スレッドは次のようになります。
unsafe void Thread(UInt16[] data)
{
fixed(UInt16* pData = data)
{
UInt16* pDataEnd = pData + data.Length;
for(UInt16* pCur=pData; pCur != pDataEnd; pCur++)
{
// do stuff
}
}
}
(意図的に)ミューテックスがないので、並列スレッドで同じデータに対して 2 つの固定ステートメントを使用しても安全かどうか疑問に思っています?? おそらく、メモリは既に固定されているため、2番目の固定は最初と同じポインターを返す必要があります...そして、最初の固定が完了すると、2番目の固定()がまだアクティブであるため、実際にはメモリの固定が解除されません..誰かがこれを試しましたか?シナリオ?