C#/unity同一线程被多次执行问题
常用到线程锁的方法对资源进行上锁操作,可能会造成许多线程等待问题。
原理:根据线程ID进行判断,只让此线程执行一次。定义原始ID=0,执行线程时,将此时的线程ID赋给变量ID。需要执行这个线程时,先判断先前是否有执行过这个线程。
public void testThread()
{
print("线程ID:" + ID);
CancellationTokenSource cts = new CancellationTokenSource();
Task.Run(() =>
{
if(ID!=0&&ID!= Thread.CurrentThread.ManagedThreadId)
{
print("我不能开始这个线程");
cts.Cancel();
return;
}
print("我要开始现在线程");
ID = Thread.CurrentThread.ManagedThreadId;
while (!cts.IsCancellationRequested)
{
Thread.Sleep(5000);
print("我是测试线程,线程ID:" + ID);
}
},cts.Token);
cts.Token.Register(() =>
{
print("线程" + Thread.CurrentThread.ManagedThreadId + "结束");
});
}