[解決済み] Swiftの変数はアトミックか?
質問
Objective-Cでは、アトミックプロパティと非アトミックプロパティを区別していますね。
@property (nonatomic, strong) NSObject *nonatomicObject;
@property (atomic, strong) NSObject *atomicObject;
私の理解では、アトミックと定義されたプロパティを複数のスレッドから安全に読み書きできますが、アトミックでないプロパティやivarを複数のスレッドから同時に読み書きアクセスすると、不正アクセスエラーを含む未定義の動作になる可能性があります。
つまり、Swiftでこのような変数があった場合。
var object: NSObject
この変数の読み書きを安全に並列で行うことはできますか?(実際に行う意味は考えずに)。
どのように解決するのですか?
低レベルのドキュメントがないので決めつけるのは早計ですが、アセンブリから勉強することは可能です。 ホッパーディスアセンブラ は素晴らしいツールです。
@interface ObjectiveCar : NSObject
@property (nonatomic, strong) id engine;
@property (atomic, strong) id driver;
@end
用途
objc_storeStrong
と
objc_setProperty_atomic
はそれぞれ非原子と原子の場合、ここで
class SwiftCar {
var engine : AnyObject?
init() {
}
}
は
swift_retain
から
libswift_stdlib_core
であり、どうやらスレッドセーフは組み込まれていないようです。
私たちは、追加のキーワード(
@lazy
のような)追加のキーワードが後で導入されるかもしれないと推測できます。
2015年7月20日更新 : これによると シングルトーンに関するブログ記事 swift環境では、特定のケースをスレッドセーフにすることができます。
class Car {
static let sharedCar: Car = Car() // will be called inside of dispatch_once
}
private let sharedCar: Car2 = Car2() // same here
class Car2 {
}
2016年05月25日更新
: 迅速な進化提案に注目
https://github.com/apple/swift-evolution/blob/master/proposals/0030-property-behavior-decls.md
- ができるようになるようです。
@atomic
の挙動を自分で実装することができそうです。
関連
-
[解決済み] dispatch_after - GCD in Swift?
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] 複数のサブクラスで1つのストーリーボードuiviewcontrollerを使用する方法
-
[解決済み] iOSの合成されたプロパティの名前を、先頭のアンダースコアで変更するのはなぜですか?重複
-
[解決済み] Swiftでクラスをプロトコルに準拠させるには?
-
[解決済み] ブロックベースのAPIメソッドでnonnullとnullableのObjective-Cキーワードを使用する方法
-
[解決済み] IOS: 角の丸いUIImageまたはUIImageViewを作成する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Objective-Cで配列に結合する
-
[解決済み] NSArrayのディープコピー
-
[解決済み] 2つの日付の差を計算するにはどうすればよいですか?
-
[解決済み] NSLog オーバーライドされた記述方法でのオブジェクトのメモリアドレスの記録
-
[解決済み] NSDictionaryにboolean値を追加するにはどうすればよいですか?
-
[解決済み] ブロックベースのAPIメソッドでnonnullとnullableのObjective-Cキーワードを使用する方法
-
[解決済み] Objective-Cでオブジェクトをコピーする方法
-
[解決済み] Objective-Cでクラスのインスタンスを@protocolにキャストする
-
[解決済み] std::stringをNSStringに変換する方法は?
-
[解決済み] NSStringをstd::stringに変換するにはどうしたらいいですか?