如何对网站页面进行优化汕头市城乡与住房建设局

张小明 2026/1/11 6:37:26
如何对网站页面进行优化,汕头市城乡与住房建设局,定安住房和城乡建设局网站,专业购物网站建设价格1. atomicC11 引入的 atomic 头文件和 std::atomic 模板是无锁并发编程的核心#xff0c;用于实现多线程间的原子操作#xff0c;避免数据竞争#xff08;data race#xff09;#xff0c;替代传统的互斥锁#xff08;如 std::mutex#xff09;以提升并发性能。…1. atomicC11 引入的atomic头文件和std::atomic模板是无锁并发编程的核心用于实现多线程间的原子操作避免数据竞争data race替代传统的互斥锁如 std::mutex以提升并发性能。使用atomic的成员函数对T类型的数据进行操作是原子的这就使得某些简单的操作不再需要我们去加锁访问而是直接采用原子操作。例如一个多线程共享的计数器atomicint a_cnt 0; int cnt 0; void func() { for (int i 0; i 100000; i) { a_cnt; cnt; } } int main() { vectorthread pool; for (int i 0; i 4; i) { pool.emplace_back(func); } for (auto t : pool) { t.join(); } cout 原子 a_cnt endl; cout 非原子 cnt endl; return 0; }值得注意的是atomic作为模板实际上并不完全支持所有类型。主要支持的是整型家族、指针类型以及任何满足 CopyConstructible 和 CopyAssignable 的可简单复制 (TriviallyCopyable)类型例如struct Counters { int a; int b; }; // user-defined trivially-copyable type std::atomicCounters cnt; // specialization for the user-defined type从C20开始atomic对智能指针进行了特化如果如下六个函数的返回值均为true则说明类型 T可以使用原子操作否则不行std::is_trivially_copyableT::value std::is_copy_constructibleT::value std::is_move_constructibleT::value std::is_copy_assignableT::value std::is_move_assignableT::value std::is_sameT, typename std::remove_cvT::type::value注意std::atomic 对象不可拷贝、不可移动因为拷贝 / 移动会破坏原子性。1.1 核心成员函数函数功能load原子读取值store原子写入值exchange原子交换值返回旧值写入新值compare_exchange_weak/strong比较并交换CAS核心原子操作实现无锁算法的基础fetch_add/fetch_sub原子加减返回旧值仅对整数 / 指针类型有效operator/--原子自增 / 自减重载运算符等价于fetch_add(1)/fetch_sub(1)operator原子赋值等价于 store(val)is_lock_free()判断当前原子操作是否 “无锁”否则内部可能用互斥锁实现1.2 CAS操作CAS 是无锁编程的基石即Compare And Set或Compare And Swap上面所有对值进行修改的成员函数底层都是通过如下两个函数实现bool compare_exchange_weak( T expected, T desired) bool compare_exchange_strong( T expected, T desired)这两个函数均为原子操作依赖于硬件提供的CAS指令核心原理为比较原子对象的当前值与expected若相等将原子对象值设为desired返回true若不等将expected更新为原子对象的当前值返回false。weak 与 strong 的区别在于是否使用缓存一致性协议weak弱版本可能 “伪失败”值相等但返回 false性能更高strong强版本值相等时必成功无伪失败。例如operator的底层实现可能与Add函数的实现相似atomicint a_cnt 0; int cnt 0; void Add(atomicint cnt) { int old cnt.load(); // cnt与old的值相同则将new赋值给cnt否则将cnt的值更新给old // 确保将数据写回之前没有其他线程对目标数据进行了修改进而导致数据的覆盖 // 本质上来说atomic的原理就是在将数据写回之前验证数据是否已被其他线程修改 // 若已被修改则重新计算更新后的值并再次尝试写回直到某次成功 // while (!atomic_compare_exchange_weak(cnt, old, old 1)); while (!a_cnt.compare_exchange_weak(old, old 1)); } void func() { for (int i 0; i 100000; i) { Add(a_cnt); cnt; } } int main() { vectorthread pool; for (int i 0; i 4; i) { pool.emplace_back(func); } for (auto t : pool) { t.join(); } cout 原子 a_cnt endl; cout 非原子 cnt endl; return 0; }再例如使用CAS操作实现无锁的链式栈部分代码#pragma once #include atomic template typename T class Node { int _val; Node* _next; Node(int val 0, Node* next nullptr) :_val(val) ,_next(next) { } }; template typename T class LockFreeStack { public: void push(const T val) { NodeT* newNode new NodeT(val, _head.load()); while (!_head.compare_exchange_weak(newNode-next, newNode)); } private: std::atomicNodeT* _head nullptr; };1.3 内存序Memory Orderstd::atomic 的所有操作都可指定内存序参数默认 std::memory_order_seq_cst用于控制指令重排序编译器 / CPU 是否会重排原子操作的前后指令内存可见性一个线程的写操作对另一个线程的读操作的可见性。例如内存序枚举值含义memory_order_relaxed松散序仅保证操作本身原子性无可见性 / 重排序约束最弱memory_order_consume消费序保证对依赖于该原子操作的读写不重排C20 已弃用memory_order_acquire获取序读操作禁止后续指令重排到该操作前且能看到之前的释放操作memory_order_release释放序写操作禁止之前指令重排到该操作后且写结果对获取序可见memory_order_acq_rel同时具备 acquire 和 release 语义用于读写操作如 CASmemory_order_seq_cst顺序一致序所有线程看到的操作顺序一致最强默认性能最差通常来说使用默认内存序即可各内存序的效率差别实际上并不大优先保证正确性。在要求极致性能的场景下我们再考虑对内存序进行优化。2. 原子操作实现自旋锁#pragma once #include atomic class SpinLock1 { public: void lock() { // exchange: 将对象值设置为参数值返回原本的值 while (_flag.exchange(true)) { // 自旋等待锁释放 } } void unlock() { _flag.store(false); } private: std::atomicbool _flag false; }; class SpinLock2 { public: void lock() { while (_flag.test_and_set()) { // 自旋等待锁释放 } } void unlock() { _flag.clear(); } private: std::atomic_flag _flag ATOMIC_FLAG_INIT; };3. 无锁队列未来补充。。。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

高端移动网站开发菏泽到濮阳

吐血推荐8个AI论文写作软件,本科生轻松搞定毕业论文! AI 工具让论文写作不再难 对于许多本科生来说,毕业论文是大学生活中最令人头疼的任务之一。从选题到撰写,再到查重和降重,每一个环节都可能让人感到压力山大。而随…

张小明 2026/1/10 12:01:54 网站建设

网站制作公司获取客户短网址网站

如何快速构建RR引导镜像:群晖DSM系统的终极部署指南 【免费下载链接】rr Redpill Recovery (arpl-i18n) 项目地址: https://gitcode.com/gh_mirrors/rr2/rr RR(Redpill Recovery)是一个革命性的引导镜像项目,专为在本地机器…

张小明 2026/1/10 12:01:55 网站建设

咸阳城乡建设局网站网络营销的方式有几种

第一章:Open-AutoGLM平台性能优化概述Open-AutoGLM作为一个面向自动化生成语言模型推理与调优的开放平台,其核心目标是提升大规模模型在多样化硬件环境下的运行效率。为实现这一目标,平台从计算图优化、内存管理、并行策略等多个维度进行了系…

张小明 2026/1/10 12:01:53 网站建设

视频网站亏损也做百度搜索指数和资讯指数

BotW存档管理器:跨平台游戏进度迁移解决方案 【免费下载链接】BotW-Save-Manager BOTW Save Manager for Switch and Wii U 项目地址: https://gitcode.com/gh_mirrors/bo/BotW-Save-Manager 《塞尔达传说:旷野之息》作为任天堂的经典作品&#x…

张小明 2026/1/10 12:01:57 网站建设

用angularjs做的网站百度推广代理商有哪些

目录具体实现截图项目介绍论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持Python(flask,django)、…

张小明 2026/1/9 20:52:36 网站建设