UE线程安全锁 FCriticalSection 使用

张开发
2026/4/18 2:25:49 15 分钟阅读

分享文章

UE线程安全锁 FCriticalSection 使用
我们在操作UE其他线程API时例如RDG渲染线程等需要加上线程安全锁本文来学习这块如何操作。1.h文件新建锁对象FCriticalSection MyLock;// 锁对象TArrayfloatTestData;// 测试数据2.cpp文件中测试FScopeLock是语法糖在析构函数中处理解锁操作当函数执行完退出作用域时则会调用析构自动解锁。voidAddTestData(floatValue){FScopeLockLock(MyLock);TestData.Add(Value);UE_LOG(LogTemp,Log,TEXT(TestData Add, %f),TestData.Last());}3.如果不用这个语法糖是这样voidASideScrollingCharacter::AddTestData(floatValue){MyLock.Lock();TestData.Add(Value);MyLock.Unlock();}4.如果函数体内要进行多次加锁解锁操作这时用FScopeLock就不合适MyLock.Lock();TestData.Add(1.0f);MyLock.Unlock();//...MyLock.Lock();TestData.Add(2.0f);MyLock.Unlock();5.并且直接使用FCriticalSection还可使用TryLock接口:if(MyLock.TryLock()){}https://dev.epicgames.com/documentation/unreal-engine/API/Runtime/Engine/FSimpleStreamableAssetManager/FScopedLock?application_version5.7langen-US

更多文章