两个线程并行执行,字符串str时而被Add1操作,时而被Add2操作
using System.Threading;
using UnityEngine;
public class ThreadTest : MonoBehaviour {
private string str;
void Start () {
Thread t1 = new Thread(Add1);
t1.Start();
Thread t2 = new Thread(Add2);
t2.Start();
Thread.Sleep(1000);
Debug.Log(str);
}
public void Add1()
{
for(int i=0;i<20;i++)
{
Thread.Sleep(10);
str += "A";
}
}
public void Add2()
{
for (int i = 0; i < 20; i++)
{
Thread.Sleep(10);
str += "B";
}
}
}
避免线程竞争,可以通过加锁(lock)来保证线程安全
using System.Threading;
using UnityEngine;
public class ThreadTest : MonoBehaviour {
private string str;
public static Object o = new Object();
void Start () {
Thread t1 = new Thread(Add1);
t1.Start();
Thread t2 = new Thread(Add2);
t2.Start();
Thread.Sleep(1000);
Debug.Log(str);
}
public void Add1()
{
lock (o)
{
for (int i = 0; i < 20; i++)
{
Thread.Sleep(10);
str += "A";
}
}
}
public void Add2()
{
lock (o)
{
for (int i = 0; i < 20; i++)
{
Thread.Sleep(10);
str += "B";
}
}
}
}