当前位置:   article > 正文

Unity dots IJobParallelFor并行的数据写入问题

Unity dots IJobParallelFor并行的数据写入问题

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;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

上面的写法会报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;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
解决方案二

只访问index索引下的数据

[BurstCompile]  
public struct IncrementJob : IJobParallelFor  
{  
    [ReadOnly] public NativeArray<int> baseValues;  
    public NativeArray<int> resultValues;   
    public void Execute(int index)  
    {
    	resultValues[index]=5;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/958883
推荐阅读
相关标签
  

闽ICP备14008679号