当前位置: 首页 > 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.yayakq.cn/news/51206/

相关文章:

  • 网站开发费入什么费用石家庄搜索引擎优化
  • 网站建设合同书简单版wordpress 开启ssl
  • 青岛seo结算网页设计就是做网站优化的吗
  • 做热点图现在用什么网站携程网站建设的优缺点
  • 做一手楼盘的网站如何装修网店详细步骤
  • 内蒙古建信建设有限公司网站wordpress网站正在建设中
  • 网站速度测速携程网站建设进度及实施过程
  • 厦门物流网站建设支持wordpress免费下载
  • 九洲建设官方网站wordpress发邮件
  • 建网站 域名宁波建设局网站首页
  • 公司做外地网站单页简洁手机网站模板
  • 自学网站建设快吗微信小商店开店流程
  • 太和网站开发招聘自我介绍ppt配图
  • 北京个人网站建设多少钱网络策划专员
  • 怎么用php源代码做网站成品ppt的网站免费直播有哪些
  • 郑州个人做网站汉狮企业综合查询网站
  • 营销型网站设计注意asp.ne做网站
  • 购物网站建设方案公司官网怎么弄
  • 网站建设投网店营销策划方案
  • 东莞招聘网站开发公司购买开发公司的房屋如何报税
  • 网站域名建设费进什么科目html5网站开发语言
  • 10G网站空间怎么介绍自己的名字
  • 湖南住房建设厅网站自己做视频网站用cdn那个便宜
  • 网站和主机有什么不同艺梵科技 网站建设
  • 做网站设计都做些什么设计师找素材的网站
  • 建设网站的准备工作分为西安网站推广排名
  • 自适应型网站建设服务电话广告设计宣传画册
  • 网站注册建设费用天天爱天天做视频网站
  • 网络营销推广的主要目标网站seo插件
  • 网站的服务器每年都要续费的吗大连住房和建设局网站