El uso de bloqueo de subprocesos múltiples de Unity (uso de subprocesos múltiples de problemas de almacenamiento de diccionarios)

El uso de Lock:
es equivalente a crear un candado para el diccionario.
Usar un diccionario para almacenar en subprocesos múltiples puede tener el problema de datos de diccionario incompletos. Este método debe agregarse.

//在多线程中使用字典等添加数据时,需要使用
private static readonly object  Locker = new object();


     lock (Locker)
     {
    
    
         dir.Add(index, buffer.Length);
     }

Ejemplo: si no se utiliza este método, list.count no es 5000

using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;

public class Test : MonoBehaviour
{
    
    
    object locker=new object();
    List<string> list=new List<string>();
    void Start()
    {
    
    
        for (int i = 0; i < 50; i++)
        {
    
    
            Thread thread = new Thread(Tes);
            thread.Start();
        }
    }
    void Tes()
    {
    
    
        for (int i = 0; i < 100; i++)
        {
    
    
            lock (locker)
            {
    
    
                list.Add(i.ToString());
            }
            
        }
    }
    
    void Update()
    {
    
    
        if (Input.GetMouseButtonDown(1))
        {
    
    
            Debug.Log(list.Count);
        }
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_45598937/article/details/127551770
Recomendado
Clasificación