unity的加载的api是无法在子线程中去做的,比如load一个资源unity是不允许做的,但是其他的比如科学计算这种的unity是可以使用多线程操作的。
多线程的启动
不带参数的启动 new Thread(new ThreadStart(启动函数)).Start();
带启动的启动 new Thread(new ParameterizedThreadStart(启动函数)).Start(参数)
后台线程和前台线程
后台线程可以使用IsBackground查看。后台线程与前台线程的区别在于所有的
前台线程结束后应用程序结束,而后台线程不会结束,需要手动使用Abort()来终止线程
线程的同步
线程资源的同步
使用lock进行操作, lock是monitor.enter + monitor.exit的提炼,防止monitor.exit
因为异常无法得到释放
线程访问的先后顺序
使用join函数联合线程
使用Monitor.Wait + Monitor.Pulse(信号机制)
例子:多线程的计数走完了再开始加载模型
变量同步技巧
把变量放到线程安全的容器中,这样就避免了加锁等操作
函数的同步
[MethodImpl(MethodImplOptions.Synchronized)] 函数头加入这个关键字表示函数是同步的