我想用作业在静态列表上写 - 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] 属性对其进行标记,并在计划作业之前分配它。