在作业系统中访问静态数据是否安全



我想用作业在静态列表上写 - Unity 中新引入的作业系统(多线程系统)。

以下代码有效,但仅在启动时出现意外异常错误。虽然从作业中删除突发编译器可以消除该错误,但仍然使用作业中的静态数据是否安全(如果可能,不使用突发)?

 [BurstCompile]
 struct ColChecker : IJobParallelFor
 {
    public NativeArray<Vector3> pos;
    public static NativeArray<int> Iz;
    public int key;
    public int no;
    public void Execute(int index)
       { 
       /// Code to get no
       Iz[key] = no;
    }
 }

这是不安全的,因为您无法保证没有其他内容会同时写入该字段。

相反,将 Iz 设置为非静态字段,使用 [ReadOnly] 属性对其进行标记,并在计划作业之前分配它。

最新更新