繁体   English   中英

在ObjC ++中原子属性线程安全吗?

[英]Is atomic property thread safe in ObjC++

据说在ObjC中使用“原子的”属性是线程安全的,但是我想知道在带有pthread的ObjC ++中是否仍然如此。

首先:不,无论是在Objective-C还是在C ++中,无论是一般还是声明的属性,都没有说“原子性”是线程安全的。 原子性意味着没有getter或setter(它是在对象级别,因此甚至其他属性的访问器)也不会同时运行。 但是它并没有说明设置或获取值后立即发生的事情。 要具有线程安全性,您必须做更多的事情。 (因此,声明属性的原子性毫无意义。)过去,原子/非原子与内存管理有更多关系。 自从有了ARC之后,到目前为止,这已变得不那么重要了。

在此之后,回答您的问题可能不太重要:它没有记录在案,但在过去已有更多记录。 苹果表示,他们使用了对象级锁。 由于即使很简单的NSLock也会在内部使用pthread(已记录),因此,如果您使用pthread创建线程,则我认为它们可以工作。


一些样本:

@interface Person
@property NSString *fristName;
@property NSString *lastName;
@end

@implementation Person
@end

控制流程1:

person.firstName = @"Chris";
person.lastName = @"Kienle";

控制流程2:

person.firstName = @"Amin";
person.lastName = @"Negm";
…
NSString *combined = [NSString @"%@ %@", person.firstName, person.lastName];

完美的原子和线程安全访问器可能产生的结果:

Christian Negm

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM