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;}
}