1.double-check的代码
******膜拜大神https://liam0205.me/2017/01/17/fork-safe/*************
if(NULL==ptr){ //确保在ptr是NULL的时候采取获取锁并舱室构造对象
pthread_mutex_lock(&locker);
if(NULL==ptr){ //避免重复操作和内存泄漏,因为ptr在执行完pthread_mutex_lock(&loker)之后别的线程
ptr=new type; //已经为ptr构造了对象
}
}
return ptr;
除了上面的问题之外还有问题:CPU动态调度的问题
ptr=new type; 3个内容:1.按type类型分配内存;2.执行type的构造函数;3.把内存起始地址赋给ptr
2和3在CPU中的执行顺序可能是随机的。有可能先执行了3但还没执行2的时候当前线程被中断,其他线程执行到这段代码时候,就会直接返回ptr(未初始化内存),如果后面对ptr进行访问就可能崩溃。只能根据具体CPU架构调整代码
把ptr=new type;改成:type *temp=new type; barrier();//保证ptr赋值前,内存已被初始化 ptr=temp;
2.当子线程持有锁的时候,由主线程进行fork()操作是不安全的。多线程环境下执行fork()函数不安全,慎重使用多进程和多线程混搭的模型。
3.并发concurrency
并-时间上同时 发-事件的发生 并发-两个或多个事件同时发生,一个主体 并行-同时发生,多个事件对应多个主体
4.进程的数据交流
一般进程间进行数据传递,共享必须依赖操作系统信号,套接字,文件,管道等
5.提高程序性能
将一个任务,在算法或数据上拆分成若干部分,并发执行(较短时间内完成了同样的任务)
不拆分任务,并发执行多份任务(同样的时间内完成了更多的任务)
6.线程的开销
系统启动线程会有固定的开销
CPU在线程间做上下文切换会占用CPU执行时间
7.c++11多线程
#include<thread>
$g++ --std=c++11 -pthread main.cpp -o main
8.进制转换
位制:B-binary-二进制,O-octal-八进制,D-decimal-十进制,H-hexadecimal-十六进制
(11010111.0100111)B=(?)O
11 010 111. ->327.
.010 011 1 ->234 补够三位
八进制和二进制是-3位 十六进制和二进制是-4位
(ABC.8C)=C*16^0+B*16^1+A*16^2 + 8*16^(-1)+C*16^(-2)
=2560+176+12+0.5+0.046875
=(2748.546875)D
9.IC-Integrated circuit design
Fabless-无晶圆厂
Foundry-芯片代工厂
Synopsys-新思科技
netlist-门级网表,把HDL代码转化成成netlist叫综合,综合时需要设置约束条件,比如面积,时序等
STA-static timing analysis-静态时序分析
setup time-建立时间,hold time-保持时间,violation-违例
DFT-design for test-可测性设计,目的在设计时就考虑将来的测试
布局规划-放置芯片的宏单元模块,电路的摆放位置,如IP模块,RAM,I/O引脚等
CTS-clock tree-synthesis-时钟树综合,时钟的布线,应该是对称式连到各个寄存器单元,时钟信号需要单独布线
布线-普通的信号布线,包括各种标准单元(基本逻辑门电路)之间的走线,90nm工艺,指的是金属布线的最小宽度,微观就是mos管的沟道长度
LVS-layout VS schematic-版图与逻辑综合后的门级电路图对比验证
DRC-design rule checking-设计规则检查,连线间距,连线宽度是否满足工艺要求
ERC-electrical rule checking-电气规则检查,短路,开路等违例
门延迟-构成门的晶体管在有限的时间内完成转换(当门的输入变化时,输出在有限的时间里完成改变),这个转换所用的时间就是门延时。
也成为传播延时(propagation delay),通常晶体管的尺寸越小,转换越快。
(http://blog.csdn.net/iamsarah/article/details/76174380)
两个参数:t_phl输入改变时输出由高到低 t_plh输入改变时输出由低到高 在改变50%处进行测量
D触发器延迟-1.C2Q时钟C改变时,Q改变所需要的延时,属于传播时延。2.setup时间,时钟上升沿之前,输入D稳定所需要的时间。3.hold时间,时 钟上升沿来临之后,输入D要保持稳定的时间
触发器具有记忆功能,具有两个稳定状态(0,1)的信息存储器件,在一定外界信号作用下,可以从一个稳定状态翻转到另一个状态。
DFF-data flip-flop或delay flip-flop。
cp-clock pulse-时钟脉冲