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不会让代码更快,只会让其他线程更久,主线程照样会卡

相关推荐
mxwin9 小时前
Unity Shader FLOWMAP岩浆流动制作案例
unity·游戏引擎·shader·uv
小贺儿开发9 小时前
【Arduino与Unity交互探究】01 摇杆模块
科技·unity·游戏引擎·arduino·串口通信·摇杆·硬件交互
Yasin Chen11 小时前
Unity TMP_SDF 分析(三)顶点着色器1
unity·游戏引擎·着色器
mxwin12 小时前
Unity Shader 使用 Noise 图 制作Shader 溶解效果
unity·游戏引擎
mxwin14 小时前
Unity Shader 用 Ramp 贴图实现薄膜干涉效果
unity·游戏引擎·贴图·shader·uv
魔士于安14 小时前
Unity星球资源,八大星球,带fps显示
游戏·unity·游戏引擎·贴图·模型
张老师带你学16 小时前
unity资源,深空陨石,适合太空背景的游戏开发
游戏·unity·模型
鹿野素材屋18 小时前
Unity动画幅度太大怎么办
unity·游戏引擎
垂葛酒肝汤19 小时前
Unity Sprite Rect 越界问题笔记
笔记·unity·游戏引擎
平行云19 小时前
数字孪生信创云渲染系列(一):混合信创与全国产化架构
unity·ue5·3dsmax·webgl·gpu算力·实时云渲染·像素流送