架构设计专题——多线程数据安全

       读者朋友们——大家好!

       先向大家道句——国庆快乐!前段时间挺忙的,分身无力,大家保重好身体。想要领到退休金,得先活到退休年龄!想薅退休金羊毛,可能是想多了~

       国庆后,经过半年的试用期,终于转正了!工作也相对集中一些,今年最后两个多月,主要计划还是工作为主,继续锻炼身体,后面做美食的手艺还要重新捡起来!深圳这边工作还是累一些,每周至少要加班4.5个小时!4.5小时听起来不多,但是:且听我娓娓道来!

       原则上周一、周二、周四需要加班。每天正常7.5工作小时,18:00下班,一般吃完饭遛会儿弯,到公司19:30左右,工作到21:00,可以领个夜宵;如果周三工作21:00,可以领水果……21:00离开公司,如果住的地方离公司远些,到家估计22:00了,再稍微收拾收拾,也就该就寝了,基本没有个人生活!工资就那样吧,年终奖要看绩效的,据说绩效是B,有3,但我觉得够呛。我来了半年,算项目经理,跑路4个了——问题不大,人才是流动的。越重要的事,越要投入时间思考,要不断修改模型。工作占据的时间多了,思考的时间便少了;工作时思考的多了,休息时便不想思考了;爱吃甜品是本能,少吃是对抗本能,另外也可能是老了,吃完不舒服……

       回归正题——多线程的数据安全性!

       很久以前,我有一个疑问——在回调函数中将数据拷贝到成员变量,其他函数使用这个变量的接口,是否是安全的?

       如今回头看,可以明确的是,如果其他线程使用这个变量的函数接口,是不安全的。下面明确概念:

一、概念明确

1、C++ 标准层面:什么是“数据完整性”

C++17 §1.10.21 (C++20 §6.9.2, C++23 §6.9.2)

当两个线程访问同一个内存位置且至少一个是写操作,并且它们之间没有同步(如原子操作或锁)时,就是 data race(数据竞争),其行为是未定义的(undefined behavior)。

即:

多线程读同一个对象:安全(只读)。

一个线程写、另一个线程读:不安全(未同步则未定义)。

多个线程写:不安全。

2、基本类型(如 int, float, double)在 ARM 与 x86 下的行为差异

这块不展开,只留一个结论——所有跨线程共享且会写入的对象,必须使用 std::atomic 或外部同步机制。

3、STL 常用类型的线程安全性(来自 ISO C++ 标准 / cppreference)

STL 容器在 C++ 标准中几乎都规定「多线程读是安全的,写必须同步」。

       实际测试: 在x86上一个线程memcpy更新数据,另一个线程memcpy读取数据,程序没有体现“数据撕裂”。

       另外,为了通用化数据传递,使用uint8_t *buf, uint_16 size 与模板,哪种更高效呢?

对比项

模板传结构体

传指针 + size

编译期开销

模板实例化增加编译时间,但一次性

无模板实例化,代码更通用

运行时效率

✅ 更快(几乎零额外开销):编译器完全知道结构体大小与布局,可 inline、寄存器优化

⚠️ 略慢:仅知道 uint8_t* 和长度,编译器无法推断内存语义,往往退化为内存拷贝或memcpy逻辑

类型安全

✅ 强类型、可静态检查

❌ 无类型信息,容易错配

内存拷贝

若函数参数是 const T&,零拷贝

同样可零拷贝(如果仅传指针),但通常调用者还得手动 memcpy

数据对齐

编译器自动保证结构体对齐

调用者必须手动保证

跨平台可移植性

有字节序/对齐差异风险(需 serialize)

同样有风险(但更明显)

场景

推荐方式

理由

数据 < 1KB,频繁调用(高频控制/传感)

✅ 模板传结构体 (const T&)

编译期优化彻底,零开销,类型安全

数据 >= 1KB 或动态格式

⚙️ 指针 + size

结构体模板会导致大量实例化,二进制膨胀;此时内存带宽主导性能

需要跨进程或跨网络传输

⚙️ 指针 + size + 显式序列化

必须考虑字节序与对齐

仅模块内共享、实时性高

✅ 模板传结构体

最安全最快

    欢迎关注:

本 PPT 介绍了制药厂房中供配电系统的总体概念与设计要点,内容包括: 洁净厂房的特点及其对供配电系统的特殊要求; 供配电设计的一般原则与依据的国家/行业标准; 从上级电网到工厂变电所、终端配电的总体结构与模块化设计思路; 供配电范围:动力配电、照明、通讯、接地、防雷与消防等; 动力配电中电压等级、接地系统形式(如 TN-S)、负荷等级与可靠性、UPS 配置等; 照明的电源方式、光源选择、安装方式、应急与备用照明要求; 通讯系统、监控系统在生产管理与消防中的作用; 接地与等电位连接、防雷等级与防雷措施; 消防设施及其专用供电(消防泵、排烟风机、消防控制室、应急照明等); 常见高压柜、动力柜、照明箱等配电设备案例及部分设计图纸示意; 公司已完成的典型项目案例。 1. 工程背景与总体框架 所属领域:制药厂房工程的公用工程系统,其中本 PPT 聚焦于供配电系统。 放在整个公用工程中的位置:与给排水、纯化水/注射用水、气体与热力、暖通空调、自动化控制等系统并列。 2. Part 01 供配电概述 2.1 洁净厂房的特点 空间密闭,结构复杂、走向曲折; 单相设备、仪器种类多,工艺设备昂贵、精密; 装修材料与工艺材料种类多,对尘埃、静电等更敏感。 这些特点决定了:供配电系统要安全可靠、减少积尘、便于清洁和维护。 2.2 供配电总则 供配电设计应满足: 可靠、经济、适用; 保障人身与财产安全; 便于安装与维护; 采用技术先进的设备与方案。 2.3 设计依据与规范 引用了大量俄语标准(ГОСТ、СНиП、SanPiN 等)以及国家、行业和地方规范,作为设计的法规基础文件,包括: 电气设备、接线、接地、电气安全; 建筑物电气装置、照明标准; 卫生与安全相关规范等。 3. Part 02 供配电总览 从电源系统整体结构进行总览: 上级:地方电网; 工厂变电所(10kV 配电装置、变压
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值