Unity dots IJobParallelFor并行的数据写入问题
[BurstCompile]
public struct IncrementJob : IJobParallelFor
{
[ReadOnly] public NativeArray<int> baseValues;
public NativeArray<int> resultValues;
public void Execute(int index)
{
resultValues[index+1]=5;
}
}
上面的写法会报ReadWriteBuffers are restricted to only read & write the element at the job index错误,这是出于性能和线程安全的考虑,Unity Job System限制了每个Job只能访问或修改由Job索引指定的单个元素,因此这里非index索引下的数据写入收到了限制。
解决方案一
对于接触限制的数据加入NativeDisableParallelForRestriction
[BurstCompile]
public struct IncrementJob : IJobParallelFor
{
[ReadOnly] public NativeArray<int> baseValues;
[NativeDisableParallelForRestriction] public NativeArray<int> resultValues;
public void Execute(int index)
{
resultValues[index+1]=5;
}
}
解决方案二
只访问index索引下的数据
[BurstCompile]
public struct IncrementJob : IJobParallelFor
{
[ReadOnly] public NativeArray<int> baseValues;
public NativeArray<int> resultValues;
public void Execute(int index)
{
resultValues[index]=5;
}
}