ObjC ++中的原子属性线程是否安全

时间:2015-03-23 18:03:12

标签: c++ objective-c multithreading thread-safety

据说使用“atomic”的属性在ObjC中是线程安全的,但我想知道在带有pthread的ObjC ++中它是否仍然是那种方式。

1 个答案:

答案 0 :(得分:1)

首先:不,表示“原子性”既不是一般的线程安全,也不是声明的属性,在Objective-C和C ++中也是如此。原子性意味着没有getter或setter(它在对象级别,因此甚至是其他属性的访问器)同时运行。但它没有说明在设定或获得价值后立即发生的事情。要有线程安全,你必须做更多。 (因此声明属性的原子性类似于无意义。)过去,原子/非原子与内存管理有关。到目前为止,这已经变得不那么重要了,因为我们有ARC。

在此之后,回答你的问题可能不那么重要了:没有记录,但过去已经记录了一些。 Apple称他们使用了对象级锁定。因为即使非常简单NSLock在内部使用pthreads - 这是记录的 - 我假设它们有效,如果你用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