欢迎来到我的小角落~这里有技术干货、生活碎碎念,还有偶尔的小脑洞~
FScopeLock 是 UE 中处理多线程同步的简单而高效的工具,通过 “作用域自动加锁 / 解锁” 的特性,确保共享资源的线程安全,同时减少死锁风险。在涉及多线程访问共享数据(如对象池、全局缓存、配置表)时,FScopeLock 是首选的同步方式。
FScopeLock
FCriticalSection
// 在类中声明临界区(通常是私有成员) FCriticalSection MyCriticalSection; // 共享资源(需要保护的数据) TArray<int32> SharedData;
void AddData(int32 NewValue) { // 构造FScopeLock,自动对MyCriticalSection加锁 FScopeLock Lock(&MyCriticalSection); // 访问共享资源(此时只有当前线程能执行这段代码) SharedData.Add(NewValue); // 当Lock超出作用域(函数结束),析构函数自动解锁 } int32 GetDataCount() { FScopeLock Lock(&MyCriticalSection); return SharedData.Num(); // 安全读取共享资源 }