当前位置: 首页 > news >正文

专业做包包的网站好网站优化设计的基础是网站基本要素及每个细节的优化

专业做包包的网站好,网站优化设计的基础是网站基本要素及每个细节的优化,公司内网怎么搭建,公司制作一个网站价格Atomic(原子操作与原子整数) 前置知识AtomicIntegerTget()getAndAdd()getAndSet() 关于原子操作实现无锁队列(lock-free-queue) 前置知识 happens-before: 用来描述两个操作的内存可见性 如果操作 X happens-before 操作 Y,那么 X 的结果对于…

Atomic(原子操作与原子整数)

  • 前置知识
  • AtomicIntegerT
    • get()
    • getAndAdd()
    • getAndSet()
  • 关于原子操作实现无锁队列(lock-free-queue)

前置知识

happens-before:

  • 用来描述两个操作的内存可见性 如果操作 X happens-before 操作 Y,那么 X 的结果对于 Y 可见

六种内存序:

typedef enum memory_order {memory_order_relaxed,   // relaxed不对执行顺序做保证memory_order_consume,   // consume暂时不鼓励使用 memory_order_consumememory_order_acquire,   // acquire本线程中,所有后续的读操作必须在本条原子操作完成后执行memory_order_release,   // release本线程中,所有之前的写操作完成后才能执行本条原子操作memory_order_acq_rel,   // acquire/release同时包含memory_order_acquire 和 memory_order_releasememory_order_seq_cst    // sequentially consistent保证指令的顺序一致执行,不打开编译器优化指令,按照正常的指令序执行
} memory_order;

gcc的原子操作__sync_(不推荐):使用这些原子操作gcc编译时要加上选项 -march=cpu-type

  • bool __sync_bool_compare_and_swap (type *ptr, type oldval, type newval, ...)
    比较*ptr与oldval的值,如果相等则将newval更新到*ptr并返回true
  • type __sync_val_compare_and_swap (type *ptr, type oldval, type newval, ...)
    比较*ptr与oldval的值,如果相等则将newval更新到*ptr并返回操作之前*ptr的值
  • type __sync_fetch_and_add (type *ptr, type value, ...)加,返回更新前的值
  • type __sync_fetch_and_sub (type *ptr, type value, ...)
  • type __sync_fetch_and_or (type *ptr, type value, ...)
  • type __sync_fetch_and_and (type *ptr, type value, ...)
  • type __sync_fetch_and_xor (type *ptr, type value, ...)异或
  • type __sync_fetch_and_nand (type *ptr, type value, ...)与非
  • type __sync_add_and_fetch (type *ptr, type value, ...)返回更新后的值
  • type __sync_sub_and_fetch (type *ptr, type value, ...)
  • type __sync_or_and_fetch (type *ptr, type value, ...)
  • type __sync_and_and_fetch (type *ptr, type value, ...)
  • type __sync_xor_and_fetch (type *ptr, type value, ...)
  • type __sync_nand_and_fetch (type *ptr, type value, ...)

原子操作__atomic:(C++11后推荐,使用内存序)

  • type __atomic_add_fetch(type *ptr, type val, int memorder)
  • type __atomic_sub_fetch(type *ptr, type val, int memorder)
  • type __atomic_and_fetch(type *ptr, type val, int memorder)
  • type __atomic_xor_fetch(type *ptr, type val, int memorder)
  • type __atomic_or_fetch(type *ptr, type val, int memorder)
  • type __atomic_nand_fetch(type *ptr, type val, int memorder)
  • type __atomic_fetch_add(type *ptr, type val, int memorder)
  • type __atomic_fetch_sub(type *ptr, type val, int memorder)
  • type __atomic_fetch_and(type *ptr, type val, int memorder)
  • type __atomic_fetch_xor(type *ptr, type val, int memorder)
  • type __atomic_fetch_or(type *ptr, type val, int memorder)
  • type __atomic_fetch_nand(type *ptr, type val, int memorder)
  • type __atomic_load_n (type *ptr,int memorder);_n表示加不加字节序memorder,
  • void__atomic_store_n (type *ptr, type val,int memorder);
  • type __atomic_exchange_n (type *ptr, type val,int memorder);
  • bool__atomic_compare_exchange_n (type *ptr, type *expected, type desired,bool weak, int success_memorder,int failure_memorder);
  • bool __atomic_test_and_set (void *ptr, int memorder)原子地更改 obj 所指向的 atomic_flag 的状态为设置( true )
  • void __atomic_clear (bool *ptr, int memorder)
  • void __atomic_thread_fence (int memorder)
  • bool __atomic_always_lock_free (size_t size, void *ptr)
  • bool __atomic_is_lock_free (size_t size, void *ptr)

谷歌规范const常量命名加k:const int kvalue


关于gcc的编译告警选项:
在这里插入图片描述

AtomicIntegerT

muduo::detail::AtomicIntegerT是noncopyable的派生类,不可拷贝

class AtomicIntegerT : noncopyable

类图:
在这里插入图片描述

  • volatile T value_: 用于原子操作的value_值,volatile表示直接从内存取,不从寄存器取,与该变量有关的运算,不要进行编译优化,以免出错
  • 所有其他成员函数都是通过get(), getAndAdd(), getAndSet()来实现的

get()

T get()
{// in gcc >= 4.7: __atomic_load_n(&value_, __ATOMIC_SEQ_CST)return __sync_val_compare_and_swap(&value_, 0, 0);
}

注意选项-march=cpu-type

getAndAdd()

T getAndAdd(T x)
{// in gcc >= 4.7: __atomic_fetch_add(&value_, x, __ATOMIC_SEQ_CST)return __sync_fetch_and_add(&value_, x);
}

注意选项-march=cpu-type

getAndSet()

T getAndSet(T newValue)
{// in gcc >= 4.7: __atomic_exchange_n(&value_, newValue, __ATOMIC_SEQ_CST)return __sync_lock_test_and_set(&value_, newValue);
}

注意选项-march=cpu-type

关于原子操作实现无锁队列(lock-free-queue)

无锁队列的实现

http://www.hrbkazy.com/news/2063.html

相关文章:

  • 能看男女做那个的网站怎么下载app到手机上
  • 网站中的实名身份证验证怎么做东莞seo顾问
  • 长春有几个站可以坐火车百度指数排名热搜榜
  • 建网站的哪家好搭建一个网站
  • 模仿网站千部小黄油资源百度云
  • 泛站群百度问答平台
  • 视频网站怎么做的反爬虫广州seo软件
  • 可视化编辑建站平台网络推广员要怎么做
  • 官方网站怎样做百度指数的使用方法
  • 找别人做网站多少钱网络营销类型
  • 二级域名备案网站关键词优化办法
  • 网站开发和软件开发哪个好口碑优化
  • 厦门工装室内设计公司排名好的seo公司营销网
  • 男人和女人在床上做那个网站安徽网站关键词优化
  • 网站首页的名字通常是营销软文范例大全100字
  • asp网站后台登陆地址草根seo博客
  • 视频会议系统直播聊天网站开发展示型网站有哪些
  • 网站引用优酷十大少儿编程教育品牌
  • 抖音小程序平台b2b网站推广优化
  • 衡阳企业网站关键词林俊杰mp3
  • 河北营销类网站设计怎么在腾讯地图上添加自己的店铺
  • 低内存vps搭建WordPress江门关键词优化公司
  • 施工企业招标领导小组组长的职责什么是seo搜索优化
  • .net做网站用mvc2024疫情最新消息今天
  • 做网站利用自己电脑长沙正规seo优化价格
  • 什么网站做家具外贸好呢游戏推广员上班靠谱吗
  • 网站建设加班杭州优化关键词
  • 做企业平台的网站有哪些内容黄山网站建设
  • 东莞网站建设seo博客seo教程
  • 如何做菠菜网站代理宁波网站建设推广平台