atomic

iOS 属性关键字

一曲冷凌霜 提交于 2020-09-28 18:49:37
一、分类 读写权限 原子性 引用计数 二、读写权限 readwrite 读写, readonly 只读。属性默认是 readwrite ,支持读写。 1、readonly 属性只具有 get 方法; 2、readwrite 属性同时具有 set 和 get 方法; 三、原子性 1、nonatomic 非原子的, atomiiac 原子的。属性默认是 atomiac ,也就是原子性的。 nonatomic 执行效率高。 2、atomic 读写安全,但效率低,不是绝对的安全,比如操作数组,增加或移除买这种情况下使用互斥锁来保证线程安全。 四、引用计数 1、strong/retain retain:一般是在 MRC 时使用,用来修饰对象,; strong:一般是在 ARC 时使用,用来修饰对象,不能修饰基本数据类型;是每对这个属性引用一次, retainCount 就会+1, 2、assign/unsafe_unretained assign:即可以修饰基本数据类型,又可以修饰对象类型;当修饰对象类型时,不改变 retainCount 引用计数; unsafe_unretained:只有在 MRC 时使用的比较频繁,在ARC时基本上不使用。 unsafe_unretained 和 weak 一样,表示的是对象的一种弱引用的关系,唯一的区别是: weak 修饰的对象被释放后

Cnstream源码剖析----Module基类

烂漫一生 提交于 2020-09-26 13:27:47
源码地址:https://github.com/Cambricon/CNStream/blob/master/framework/core/src/cnstream_module.cpp 关于Module基类,是cnstream的代码合集的核心部分。是用户和开发者,设计一个新的数据处理模块,绕不开的地方。 详细的介绍可以阅读CNstream用户手册:http://forum.cambricon.com/index.php?m=content&c=index&a=lists&catid=85 我们来看一下在这个基类的代码中,详细的做了什么: 1 static SpinLock module_id_spinlock_; 2 static uint64_t module_id_mask_ = 0 ; 3 static size_t _GetId() { 4 SpinLockGuard guard(module_id_spinlock_); 5 for (size_t i = 0 ; i < sizeof (module_id_mask_) * 8 ; i++ ) { 6 if (!(module_id_mask_ & ((uint64_t) 1 << i))) { 7 module_id_mask_ |= (uint64_t) 1 << i; 8 return i; 9 } 10 }

Cnstream源码剖析----Module基类

霸气de小男生 提交于 2020-09-26 12:06:59
源码地址:https://github.com/Cambricon/CNStream/blob/master/framework/core/src/cnstream_module.cpp 关于Module基类,是cnstream的代码合集的核心部分。是用户和开发者,设计一个新的数据处理模块,绕不开的地方。 详细的介绍可以阅读CNstream用户手册:http://forum.cambricon.com/index.php?m=content&c=index&a=lists&catid=85 我们来看一下在这个基类的代码中,详细的做了什么: 1 static SpinLock module_id_spinlock_; 2 static uint64_t module_id_mask_ = 0 ; 3 static size_t _GetId() { 4 SpinLockGuard guard(module_id_spinlock_); 5 for (size_t i = 0 ; i < sizeof (module_id_mask_) * 8 ; i++ ) { 6 if (!(module_id_mask_ & ((uint64_t) 1 << i))) { 7 module_id_mask_ |= (uint64_t) 1 << i; 8 return i; 9 } 10 }