gpt4 book ai didi

c++ - ObjC++ 中的原子属性线程安全吗

转载 作者:行者123 更新时间:2023-11-28 06:21:38 25 4
gpt4 key购买 nike

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

最佳答案

首先:不,不是不是说“原子性”是线程安全的,无论是在一般情况下还是对于声明的属性,无论是在 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

关于c++ - ObjC++ 中的原子属性线程安全吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29217254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com