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

怎样在网站做环评公示歌尔股份砍单

怎样在网站做环评公示,歌尔股份砍单,读书网站怎么做,綦江网站建设目录 1. 原子操作 2. 锁是干嘛的 3. 锁的实现 1. 原子操作 gcc从4.1.2开始提供了__sync_*系列的build-in函数,用于提供加减和逻辑运算的原子操作,主要接口的其声明如下: type __sync_fetch_and_add (type *ptr, type value, ...): 将valu…

目录

1. 原子操作

2. 锁是干嘛的

3. 锁的实现


1. 原子操作

        gcc从4.1.2开始提供了__sync_*系列的build-in函数,用于提供加减和逻辑运算的原子操作,主要接口的其声明如下:

  • type __sync_fetch_and_add (type *ptr, type value, ...): 将value加到ptr上,结果更新到ptr,并返回操作之前*ptr的值
  • type __sync_fetch_and_sub (type *ptr, type value, ...):从ptr减去value,结果更新到ptr,并返回操作之前*ptr的值
  • type __sync_fetch_and_or (type *ptr, type value, ...): 将ptr与value相或,结果更新到ptr, 并返回操作之前*ptr的值
  • type __sync_fetch_and_and (type *ptr, type value, ...): 将ptr与value相与,结果更新到ptr,并返回操作之前ptr的值
  • +type __sync_fetch_and_xor (type *ptr, type value, ...):将ptr与value异或,结果更新到ptr,并返回操作之前ptr的值
  • type __sync_fetch_and_nand (type *ptr, type value, ...): 将ptr取反后,与value相与,结果更新到ptr,并返回操作之前ptr的值
  • +type __sync_add_and_fetch (type *ptr, type value, ...):将value加到ptr上,结果更新到ptr,并返回操作之后新ptr的值
  • type __sync_sub_and_fetch (type *ptr, type value, ...):从ptr减去value,结果更新到ptr,并返回操作之后新*ptr的值
  • type __sync_or_and_fetch (type *ptr, type value, ...):将ptr与value相或, 结果更新到ptr,并返回操作之后新*ptr的值
  • type __sync_and_and_fetch (type *ptr, type value, ...):将ptr与value相与,结果更新到ptr,并返回操作之后新*ptr的值
  • type __sync_xor_and_fetch (type *ptr, type value, ...):将ptr与value异或,结果更新到ptr,并返回操作之后新ptr的值
  • +type __sync_nand_and_fetch (type *ptr, type value, ...):将ptr取反后,与value相与,结果更新到ptr,并返回操作之后新ptr的值
  • 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的值
  • __sync_synchronize (...):发出完整内存栅栏
  • +type __sync_lock_test_and_set (type *ptr, type value, ...): 将value写入ptr,对ptr加锁,并返回操作之前*ptr的值。即,try spinlock语义
  • void __sync_lock_release (type *ptr, ...):将0写入到ptr,并对ptr解锁。即,unlock spinlock语义

2. 锁是干嘛的

锁解决的问题:为了并行中的正确性(共享数据一致性)

        多核处理器,多个CPU如果同时访问一些共享资源,可能会导致数据不一致,即共享数据用锁设置成多CPU分时访问。

锁带来的问题:并行变串行,效率降低

3. 锁的实现

上锁:

__sync_lock_test_and_set

通过原子操作赋值,也就是锁只能一方获取。

解锁:

__sync_lock_release

通过原子操作清0。

        锁的操作均是原子操作,但是实现锁的功能,还需要内存屏蔽功能,保证临界区的执行可靠性。某些平台的部分代码:

#define SPINLOCK_INIT \{                 \0             \}#define CORELOCK_INIT          \{                          \.lock = SPINLOCK_INIT, \.count = 0,            \.core = -1             \}/* Defination of memory barrier macro */
#define mb()                          \{                                 \asm volatile("fence" ::       \: "memory"); \}#define atomic_set(ptr, val) (*(volatile typeof(*(ptr)) *)(ptr) = val)
#define atomic_read(ptr) (*(volatile typeof(*(ptr)) *)(ptr))
#define atomic_get(ptr) (*(volatile typeof(*(ptr)) *)(ptr))#ifndef __riscv_atomic
#error "atomic extension is required."
#endif
#define atomic_add(ptr, inc) __sync_fetch_and_add(ptr, inc)
#define atomic_sub(ptr, inc) __sync_fetch_and_sub(ptr, inc)
#define atomic_sub_return(ptr, inc) __sync_sub_and_fetch (ptr, inc)
#define atomic_or(ptr, inc) __sync_fetch_and_or(ptr, inc)
#define atomic_swap(ptr, swp) __sync_lock_test_and_set(ptr, swp)
#define atomic_cas(ptr, cmp, swp) __sync_val_compare_and_swap(ptr, cmp, swp)typedef struct _spinlock
{int lock;
} spinlock_t;typedef struct _semaphore
{spinlock_t lock;int count;int waiting;
} semaphore_t;typedef struct _corelock
{spinlock_t lock;int count;int core;
} corelock_t;static inline int spinlock_trylock(spinlock_t *lock)
{int res = atomic_swap(&lock->lock, -1);/* Use memory barrier to keep coherency */mb();return res;
}static inline void spinlock_lock(spinlock_t *lock)
{while(spinlock_trylock(lock));
}static inline void spinlock_unlock(spinlock_t *lock)
{/* Use memory barrier to keep coherency */mb();atomic_set(&lock->lock, 0);asm volatile("nop");
}

http://www.mmbaike.com/news/105156.html

相关文章:

  • 建设营销型网站营销怎么做
  • 做资讯网站需要什么条件班级优化大师怎么用
  • 哪些网站结构是不合理的360安全浏览器
  • 漳州做网站多少钱仁茂网络seo
  • h5企业网站定制排名个人免费域名注册网站
  • node.js做网站百度搜索排行
  • 专门做物理的网站怎么在百度上发帖推广
  • phpstudy如何建设网站搜索引擎 磁力吧
  • 去哪里找做网站青岛百度推广seo价格
  • 小网站建设公司排名全球最牛的搜索引擎
  • wordpress账户页添加选项卡优化营商环境 助推高质量发展
  • 建设自己网站教程青岛网络优化代理
  • php做商城网站怎么做好品牌营销服务
  • 公司网站建设攻略seo如何优化一个网站
  • 深圳宝安网站建设河南郑州最近的热搜事件
  • 怎么看网站有没有做301跳转联合早报 即时消息
  • 上线了做网站价格贵移动广告平台
  • 网站后台 源码广州网页定制多少钱
  • 制作企业网站的app产品质量推广营销语
  • 为什么大公司不用c 做网站cilimao磁力猫搜索引擎
  • 推荐网站建设服务商微信推广费用一般多少
  • dw做网站怎么让文字移动优化 英语
  • 常州微信网站建设教程培训机构退费法律规定
  • 用来做问卷调查的网站百度安装
  • 科技类公司网站设计小程序推广运营的公司
  • 宝鸡做网站公司电话网站开发流程的8个步骤
  • 中央广播电视总台地址温州云优化seo
  • 公司网站微信推广东莞网站建设推广技巧
  • 平面设计类网站有哪些跨境网站建站
  • 怎么做卖东西的网站东莞最新疫情