Unity中的Lock,到底在锁什么,什么时候该用?

1.一句话理解lock

lock的作用只有一个:防止多个线程"同时"访问和修改同一份数据。

2.为什么需要Lock

经典例子

cs 复制代码
int balance = 100;

void Withdraw()
{
    balance -= 50;
}

如果两个线程同时执行

线程A:读 balance = 100

线程B:读 balance = 100

线程A:写 balance = 50

线程B:写 balance = 50

结果是:钱只少了50,但取了两次。

3.lock是怎么解决这个问题的?

cs 复制代码
object _locker = new object();

lock (_locker)
{
    balance -= 50;
}

同一时间内,只允许一个线程进入这段代码

执行顺序会变成:

cs 复制代码
线程A:进 lock → 扣钱 → 出 lock
线程B:等 A 完成 → 再进 → 再扣

4.lock锁的是对象,不是代码

cs 复制代码
lock (someObject)
{
    // 临界区
}

someObject是锁,只要锁是同一个对象,线程就会互斥,换对象和换锁没有任何保护结果

cs 复制代码
lock (new object()) // 每次都是新锁
{
    ...
}
等于没锁

5.误区

lock不会让代码更快,只会让其他线程更久,主线程照样会卡

相关推荐
真鬼1231 天前
Cesium、Cmake、Dotnet快捷下载
unity·游戏引擎
真鬼1231 天前
【Unity安卓】Unity 嵌入 Android Studio 完整流程
android·unity·android studio
为你写首诗ge2 天前
【Unity知识分享】Mirror实现房间等待功能(创建房间 / 搜索房间、加入房间、房间准备、房间内角色设置、返回房间)
unity·mirror·房间等待功能
游乐码2 天前
Unity坦克案例疑难记录(二)
unity·游戏引擎
小白学鸿蒙2 天前
Funplay Unity MCP 接入 trae 实战
unity·游戏引擎·mcp
游乐码2 天前
Unity基础(一)游戏中的数学Mathf函数
游戏·unity·游戏引擎
地狱为王3 天前
Unity实现猫脸关键点检测
unity·游戏引擎·猫脸关键点检测
598866753@qq.com3 天前
Unity Job System笔记
unity
winlife_3 天前
Funplay Unity MCP 与 Unity AI Assistant 详细对比:开源 MCP 工具集 vs 官方全栈 AI 产品
人工智能·unity·开源·ai编程·claude·mcp
御水流红叶3 天前
Android-Unity游戏逆向思路
android·游戏·unity