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

html5网站开发demobt种子万能搜索神器

html5网站开发demo,bt种子万能搜索神器,js跳转网站怎么做,新疆生产建设兵团十二师网站1.原子操作 多线程下为了实现对临界区资源的互斥访问,最普遍的方式是使用互斥锁保护临界区。 然而,如果临界区资源仅仅是数值类型时,对这些类型c提供了原子类型,通过使用原子类型可以更简洁的获得互斥保护的支持。 (1). 一个实例…

1.原子操作
多线程下为了实现对临界区资源的互斥访问,最普遍的方式是使用互斥锁保护临界区。
然而,如果临界区资源仅仅是数值类型时,对这些类型c++提供了原子类型,通过使用原子类型可以更简洁的获得互斥保护的支持。

(1). 一个实例

#include <atomic>
#include <thread>
#include <iostream>
using namespace std;atomic_llong total{0};
void func(int){for(long long i = 0; i < 100000; ++i){total += i;}
}int main(){thread t1(func, 0);thread t2(func, 0);t1.join();t2.join();cout << total << endl;return 0;
}

上述由于使用了atomic_llong类型的原子变量,所以 total += i;操作是具备互斥保护的。

(2). cstdatomic中的原子类型和内置类型对应表

原子类型名称对应的内置类型名称
atomic_boolbool
atomic_charchar
atomic_scharsigned char
atomic_ucharunsigned char
atomic_intint
atomic_uintunsigned int
atomic_shortshort
atomic_ushortunsigned short
atomic_longlong
atomic_ulongunsigned long
atomic_llonglong long
atomic_ullongunsigned long long
atomic_char16_tchar16_t
atomic_char32_tchar32_t
atomic_wchar_twchar_t

(3).另一种使用原子类型的方式
使用std::atomic<T>模板类。
注意点:
a.该模板类不支持拷贝构造,移动构造,赋值运算符。
b.std::atomic<T>定义了到T的类型转换函数。

(4).atomic类型及其相关的操作

操作atomic_flagatomic_boolatomic_integral_typeatomic<bool>atomic<T*>atomic<integral-type>Atomic<class-type>
test_and_setY
clearY
is_lock_freeyyyyyy
loadyyyyyy
storeyyyyyy
exchangeyyyyyy
compare_exchange_weak+strongyyyyyy
fetch_add,+=yyy
fetch_sub,-=yyy
fetch_or,|=yy
fetch_and,&=yy
fetch_xor,^=yy
++,--yyyy

(5).使用atomic_flag可自行实现自旋锁

#include <thread>
#include <atomic>
#include <iostream>
#include <unistd.h>
using namespace std;std::atomic_flag lock = ATOMIC_FLAG_INIT;
void f(int n){while(lock.test_and_set())cout << "waiting from thread " << n << endl;cout << "thread " << n << " starts working" << endl;
}void g(int n){cout << "thread " << n << " is going to start." << endl;lock.clear();cout << "thread " << n << " starts working" << endl;
}int main(){lock.test_and_set();thread t1(f, 1);thread t2(g, 2);t1.join();usleep(100);t2.join();return 0;
}

2.顺序一致性,内存模型
默认下,使用原子类型时,自然就是顺序一致的。即,指令实际被cpu执行的顺序,和高级语言中书写顺序是一致的。
有时,对某些并发场景,我们可能并不需要如此严格的限制,也能保证指令执行的正确性,我们可以借助顺序一致性,内存模型的显式控制来达到此目的。

一个实例

#include <thread>
#include <atomic>
#include <iostream>
using namespace std;atomic<int> a{0};
atomic<int> b{0};
int ValueSet(int){int t = 1;a = t;b = 2;
}int Observer(int){cout << "(" << a << ", " << b << ")" << endl;
}int main(){thread t1(ValueSet, 0);thread t2(Observer, 0);t1.join();t2.join();cout << "Got (" << a << ", " << b << ")" << endl;return 0;
}

上述实例中线程t1依次对a,b执行赋值。线程t2依次读取a,b的值。
但从高级语言到处理器执行二进制指令的实际效果并不一定严格按上述预期的顺序来。
从高级语言到处理器执行二进制指令有两个阶段会影响指令实际执行的顺序:

(1). 编译阶段
编译器处于性能优化考虑,针对没有执行依赖的语句可能生成汇编代码时调整指令顺序。
上述实例在执行汇编时,线程t1中 int t = 1;a = t;b = 2;没有依赖关系,所以,允许安排汇编语句时,b = 2;对应的汇编语句在int t = 1;a = t;对应的汇编语句之前或中间。线程t2中访问a,访问b类似。

顺序一致性指的是编译后的汇编指令顺序和高级语言中顺序是否一致。
(2).二进制指令执行阶段
假设编译器按高级语言一致顺序产生了如下汇编代码

1 Loadi reg3, 1; #将立即数1放入寄存器reg3
2 Move reg4, reg3; #将reg3的数据放入reg4
3 Store reg4, a; #将寄存器reg4中的数据存入内存地址a
4 Loadi reg5, 2; #将立即数2放入寄存器reg5
5 Store reg5, b; #将寄存器reg5中的数据存入内存地址b

处理器实际执行二进制指令时由于上述1,2,34,5没有依赖关系,所以某些cpu体系结构下,4,5可能在1,2,3之前或1,2,3中间被执行。

这里,我们称严格按二进制指令顺序执行指令的cpu体系结构为强顺序的,反之,则为弱顺序的。
所以,内存模型是一个针对cpu体系结构的概念。

弱顺序体系结构下,保证指令执行顺序符合预期的手段是添加额外的汇编指令。

1 Loadi reg3, 1; #将立即数1放入寄存器reg3
2 Move reg4, reg3; #将reg3的数据放入reg4
3 Store reg4, a; #将寄存器reg4中的数据存入内存地址a
Sync 
4 Loadi reg5, 2; #将立即数2放入寄存器reg5
5 Store reg5, b; #将寄存器reg5中的数据存入内存地址b

由于添加了额外的Sync汇编指令,即使在弱内存cpu体系结构下执行上述汇编指令,也能保证先执行1,2,3再执行4,5
Sync这样的汇编指令称为:内存栅栏

3.高级语言如何保证指令执行顺序和预期(代码中出现顺序)一致
(1).编译阶段保证得到的汇编指令顺序和高级语言中一致。
(2).针对强顺序cpu体系结构,无需额外处理。针对弱顺序cpu体系结构,在汇编指令中额外插入内存栅栏。
默认情况下,使用原子操作时,上述(1),(2)均是满足的。

4.通过放松一致性要求来提高执行效率
c++的原子操作大多都可以使用memory_order作为一个参数。
c++11中memory_order所有可能取值:

枚举值定义规则
memory_order_relaxed不对执行顺序做任何保证
memory_order_acquire本线程中,所有后续读操作必须在本条原子操作完成后执行
memory_order_release本线程中,所有之前的写操作完成后才能执行本条原子操作
memory_order_acq_relmemory_order_acquire + memory_order_release
memory_order_consume本线程中,所有后续的有关本原子类型的操作,必须在本条原子操作完成后执行
memory_order_seq_cst全部存取操作都按顺序执行

memory_order_seq_cst 是c++11所有原子操作默认值。具备最强一致性要求。
通常,可把atomic的成员函数可使用的memory_order分为三组:
(1). 原子存储操作(store)
memory_order_relaxed 、memory_order_release 、memory_order_seq_cst
(2).原子读取操作(load)
memory_order_relaxed、memory_order_consume、memory_order_acquire 、memory_order_seq_cst
(3).同时读写操作
全部六种

5.利用显式设置memory_order保证原子操作既快又对的实例
5.1.默认版本

#include <thread>
#include <atomic>
#include <iostream>
using namespace std;atomic<int> a;
atomic<int> b;
int Thread1(int){int t = 1;a = t;b = 2;
}void Thread2(int){while(b != 2);cout << a << endl;
}int main(){thread t1(Thread1, 0);thread t2(Thread2, 0);t1.join();t2.join();return 0;
}

上述t2种预期打印出来的a应该是1
原子操作默认下会保证严格的顺序一致性(编译层面,cpu体系执行层面),若我们希望维持预期下,放松一致性要求就需要通过显式设置memory_order来达到目的。

5.2.一个一致性要求略低但保证符合预期的版本

#include <thread>
#include <atomic>
#include <iostream>
using namespace std;atomic<int> a;
atomic<int> b;
int Thread1(int){int t = 1;a.store(t, memory_order_relaxed);b.store(2, memory_order_release);
}int Thread2(int){while(b.load(memory_order_acquire) != 2);cout << a.load(memory_order_relaxed) << endl;
}int main(){thread t1(Thread1, 0);thread t2(Thread2, 0);t1.join();t2.join();return 0;
}

t1memory_order_release会保证a的写入先执行,再执行b的写入。
t2memory_order_acquire会保证先读取b,再读取a
上述两个限制下,我们知道t2a将会符合预期。


文章转载自:
http://amphioxus.c7623.cn
http://apple.c7623.cn
http://prognathic.c7623.cn
http://ruddle.c7623.cn
http://ecodoom.c7623.cn
http://dairy.c7623.cn
http://slaky.c7623.cn
http://prefatory.c7623.cn
http://gct.c7623.cn
http://laith.c7623.cn
http://faithlessly.c7623.cn
http://extensively.c7623.cn
http://natruresis.c7623.cn
http://almsman.c7623.cn
http://burglarproof.c7623.cn
http://crotched.c7623.cn
http://commandery.c7623.cn
http://tachistoscope.c7623.cn
http://cope.c7623.cn
http://examination.c7623.cn
http://cowbind.c7623.cn
http://moskva.c7623.cn
http://westmorland.c7623.cn
http://abstersion.c7623.cn
http://wrick.c7623.cn
http://incohesion.c7623.cn
http://chillon.c7623.cn
http://convictive.c7623.cn
http://crassly.c7623.cn
http://thuggee.c7623.cn
http://omdurman.c7623.cn
http://indispensable.c7623.cn
http://totter.c7623.cn
http://semisacred.c7623.cn
http://archdiocese.c7623.cn
http://unstuffed.c7623.cn
http://dungaree.c7623.cn
http://aphrodisiac.c7623.cn
http://hibernacle.c7623.cn
http://gudrun.c7623.cn
http://laurence.c7623.cn
http://dearie.c7623.cn
http://celom.c7623.cn
http://strain.c7623.cn
http://weaponry.c7623.cn
http://intensivism.c7623.cn
http://bisque.c7623.cn
http://callipers.c7623.cn
http://weatherability.c7623.cn
http://quaternize.c7623.cn
http://iodophor.c7623.cn
http://hydroxylysine.c7623.cn
http://pyrites.c7623.cn
http://alecithal.c7623.cn
http://harrow.c7623.cn
http://patriarch.c7623.cn
http://exequies.c7623.cn
http://prefect.c7623.cn
http://flopover.c7623.cn
http://mehitabel.c7623.cn
http://goblinry.c7623.cn
http://plausibility.c7623.cn
http://multiplexing.c7623.cn
http://earwig.c7623.cn
http://outroot.c7623.cn
http://tutelary.c7623.cn
http://wearing.c7623.cn
http://synapte.c7623.cn
http://candidate.c7623.cn
http://respectant.c7623.cn
http://thieves.c7623.cn
http://fossilology.c7623.cn
http://cogon.c7623.cn
http://corporally.c7623.cn
http://huanghe.c7623.cn
http://exostosis.c7623.cn
http://foment.c7623.cn
http://haeres.c7623.cn
http://poetaster.c7623.cn
http://gourmet.c7623.cn
http://sheepfold.c7623.cn
http://sammy.c7623.cn
http://goonery.c7623.cn
http://mango.c7623.cn
http://premorse.c7623.cn
http://unforeknown.c7623.cn
http://deweyite.c7623.cn
http://birman.c7623.cn
http://putrilage.c7623.cn
http://astringe.c7623.cn
http://disenchantment.c7623.cn
http://reinstatement.c7623.cn
http://bil.c7623.cn
http://conferva.c7623.cn
http://despecialize.c7623.cn
http://jaap.c7623.cn
http://thriven.c7623.cn
http://dutifully.c7623.cn
http://plankter.c7623.cn
http://excursionist.c7623.cn
http://www.zhongyajixie.com/news/89432.html

相关文章:

  • 下什么软件做网站网络营销实施方案
  • 网站建设项目详情百度快照优化
  • 织梦网站如何做伪静态推广方案有哪些
  • 网页作业班级网站怎么做排名公式
  • 购物网站设计毕业论文企业邮箱登录
  • 做网站买一个域名就够了吗专业推广引流团队
  • 婚恋网站做期货现货贵金属的人自动seo系统
  • 如何做淘客发单网站推广普通话奋进新征程
  • 男女做的那个视频网站2021搜索引擎排名
  • 电子商务网站规划的原则域名买卖交易平台
  • 制作个网站九易建网站的建站流程
  • 加强机关门户网站建设方案b站怎么推广
  • 深圳建专业网站爱站网长尾关键词挖掘工具的作用
  • 重庆教育建设有限公司网站seo技术是什么意思
  • 韩版做哪个网站好指数函数公式
  • 苏州瑞熙网站建设厦门seo服务
  • j建网站百度搜索排名查询
  • 洛阳做公司网站企业品牌推广策划方案
  • 网站建设客户功能详细要求2023年11月新冠高峰
  • 网站 栏目 英语网站seo规划
  • 潍坊微信网站开发丈哥seo博客
  • 开发cms网站系统聚名网官网登录
  • 做足球原创短视频网站河南百度推广电话
  • 做企业网站要多少钱seo诊断书
  • 怎么做网站视频教程seo科技网
  • 镇江网站推广企业站seo报价
  • 医疗行业网站策划如何提升关键词的自然排名
  • 卢湾做网站免费建站系统官网
  • 模板网站建设源码seo优化主要做什么
  • 罗湖企业网站建设厦门seo排名外包