using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
public class Test : MonoBehaviour {
//用来存储数值的List数组
private List<int> intList = new List<int>();
void Start()
{
//给intList赋初始值1~10
for (int i = 1; i <= 10; i++)
{
intList.Add(i);
}
//开启3个线程
Thread x1 = new Thread(XC1);
x1.Start();
Thread x2 = new Thread(XC2);
x2.Start();
Thread x3 = new Thread(XC3);
x3.Start();
}
//线程1,用来输出intList内的所有值
void XC1()
{
lock (intList)
{
for (int i = 0; i < intList.Count; i++)
{
print("线程1输出:" + intList[i]);
Thread.Sleep(500);
}
}
print("线程1结束");
}
//线程2,和线程1一样,用来输出intList的所有值
void XC2()
{
lock (intList)
{
for (int i = 0; i < intList.Count; i++)
{
print("线程2输出" + intList[i]);
Thread.Sleep(250);
}
}
print("线程2结束");
}
//线程3,用来删除intList内的某个值
void XC3()
{
lock (intList)
{
Thread.Sleep(600);
intList.RemoveAt(7);
print("删除一个值");
}
}
}
我在线程1和线程2中用for循环去访问intList中的值,但我希望在线程3中去删除intList中的值的时候不影响到线程1和线程2的输出,于是我加了Lock锁,但是现在问题又来了,加了锁之后线程1和线程2就不是异步执行了,这种情况应该怎么办?
我希望线程1和线程2异步执行并完好的输出intList中的值,线程3在没有人引用intList的时候再去删除intList中的值。
加了锁之后线程1和线程2也是在异步执行,只是线程暂停了,等待解锁而已