【UE·多线程】UE4 多线程同步之线程锁FScopeLock
日常多线程开发过程中,线程同步是最基本的需求,各操作系统也给我们提供了相应的同步内核对象,例如Windows中的原子(Atomic),临界区(Critical Section),互斥量(Mutex),信号量(Semaphore),还有事件(Event),做过Windows平台开发的朋友,对这些东西肯定非常熟悉了,同理Linux也是有自身的相关的东西,这些都属于内核对象,是系统层面提供的,QT,UE4等其他工具只是实现了对这些内核对象的封装而已,所以这些东西的原理也都大差不差,一通百通,UE4也是在上层抽象出了不同平台的接口,在windows平台下,UE4 临界区的代码片段如下
class FWindowsCriticalSection
{Windows::CRITICAL_SECTION CriticalSection;
public:FORCEINLINE FWindowsCriticalSection(){CA_SUPPRESS(28125);Windows::InitializeCriticalSection(&CriticalSection);Windows::SetCriticalSectionSpinCount(&CriticalSection,4000);}FORCEINLINE ~FWindowsCriticalSection(){Windows::DeleteCriticalSection(&CriticalSection);}FORCEINLINE void Lock(){Windows::EnterCriticalSection(&CriticalSection);}FORCEINLINE bool TryLock(){if (Windows::TryEnterCriticalSection(&CriticalSection)){return true;}return false;}FORCEINLINE void Unlock(){Windows::LeaveCriticalSection(&CriticalSection);}
private:FWindowsCriticalSection(const FWindowsCriticalSection&);FWindowsCriticalSection& operator=(const FWindowsCriticalSection&);
};
跟踪一下,Windows::InitializeCriticalSection(&CriticalSection);,在Windows平台下它确实调用的是Windows系统的InitializeCriticalSection API函数
UE4的线程同步对象有很多,今天我们先来看一下线程锁,FScopeLock,它实现了一个区域级别的锁,它的实现需要注意两点
- 构造FScopeLock时需要一个临界区对象
FCriticalSection cs;
- 用大括号将需要同步的代码块包住,FScoppeLock的对象放在大括号第一行(待验证,UE4引擎中有些代码并没有按照这个规则
FScopeLock lock(cs);
伪代码如下
#include "Misc/ScopeLock.h"
void ThreadFunction()
{//不需要同步代码块{//需要同步代码块,lock必须在第一行FScopeLock lock(&cs);}//不需要同步代码块
}
那此时大括号的内容就被锁住,同一时间,只允一个线程访问临界资源
【UE·多线程】UE4 多线程同步之线程锁FScopeLock相关推荐
- Python 多线程总结(2)— 线程锁、线程池、线程数量、互斥锁、死锁、线程同步
主要介绍使用 threading 模块创建线程的 3 种方式,分别为: 创建 Thread 实例函数 创建 Thread 实例可调用的类对象 使用 Thread 派生子类的方式 多线程是提高效率的一种 ...
- java 多线程 张孝祥_多线程11_张孝祥 java5的线程锁技术
本例子因为两个线程公用同线程中,使用同一个对象,实现了他们公用一把锁,实现了同一个方法的互斥. package locks; /** *会被打乱的效果 */ public class LockTest ...
- Python之线程同步与线程锁
https://blog.csdn.net/u013008795/article/details/91357383
- python 线程锁_Python3多线程执行任务含线程同步锁
Python启动多线程执行任务,用线程锁实现同步分配任务,最后等待所有线程执行完毕#python3多线程演示 import threading import random import time to ...
- python多线程,线程锁
python使用多线程, 不一定运行速度快,这里引入GIL(global interpreter lock) python解释器中任意时刻都只有一个线程在执行; GIL执行过程: 1). 设置一个GI ...
- Python 多线程如何按照任务优先级顺序执行,并根据任务分配来申请线程锁
文章目录 项目介绍 总结 项目介绍 模拟一个场景,有一个工作站,工作站内有一台机器人负责抓取站内四个瓶子进行一系列工作流程,如扫描.称重.加热等动作,但瓶子加热需要较长的时间,机器人在将瓶子放到加热台 ...
- 线程安全(二)Lock 什么是Lock线程锁?与synchronized区别在哪?Lock锁是如何实现等待通知的?如何实现线程顺序执行?
文章目录 前言 一.synchronized的缺陷 二.Lock接口的特性及基本方法 接口的特性 接口基本的方法: 三.ReentrantLock介绍及实例 ReentrantLock类常见方法: l ...
- python线程同步锁_Python实现的多线程同步与互斥锁功能示例
本文实例讲述了Python实现的多线程同步与互斥锁功能.分享给大家供大家参考,具体如下: #! /usr/bin/env python #coding=utf-8 import threading i ...
- 史上最强多线程面试44题和答案:线程锁+线程池+线程同步等
最全BAT必考题答案系列 最全MySQL面试60题和答案 史上最全Spring面试71题与答案 史上最全Redis面试49题(含答案):哨兵+复制+事务+集群+持久化等 分布式缓存Redis+Memc ...
最新文章
- nltk 文本预处理
- Learning the Vi Editor, 6th Edition学习笔记(0)
- linux: kill -9
- 求数据流中的第K大元素
- adam优化_认识 AdaMod: 一个新的有记忆的深度学习优化器
- java程序无法启动_无法打开java小程序?小迅支招
- latex数学公式转换器
- 【元胞自动机】基于元胞自动机模拟和改进遗传算法的动态网络分配模型分析matlab仿真
- Office 2013 Excel 转换 Word
- CIO40: IT 人之读书与家庭
- 20种简单美化照片PS技术
- css学习记录第一天(选择器)
- 本周最新文献速递20220508
- 缓存Cache-Control
- 信任令BIU首发BigONE
- iOS 使用 Admob 获取广告收入
- linux mint安装搜狗输入法
- c语言编程题企业奖金,【C语言】企业奖金发放问题
- 字段是否包含中文、英文、数字
- 创业需要的就是“不安分”的人
热门文章
- 如何打赢出行下半场?百度地图祭出这四招
- 硬核解析Linux文件系统底层【VFS文件系统】
- R语言介绍及安装教程
- java静态变量存储空间分配
- 闲来无事,说说Windows剪贴板 -- 剪贴板概述部分
- Arduino环境下ESP32另外的下载方式(用USB转TTL连接TX0和RX0下载)
- Java 多线程练习 三人共抢10张票 限制黄牛党只能抢到一张票
- 博图V17 DB块 导入 昆仑通态屏
- 计算机dos批处理代码,计算机Dos批处理,编写一键清理系统垃圾的bat代码,小白都可以学-批处理删除文件...
- VS2010SP1安装卡在VS10Sp1-KB983509处的解决