首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Swift中声明易失变量

如何在Swift中声明易失变量
EN

Stack Overflow用户
提问于 2014-07-26 13:26:56
回答 5查看 5.9K关注 0票数 16

我想转换成Swift从目标-C代码如下;

代码语言:javascript
复制
int sum = 0;
x = 1;
for (int i = 0; i < 100; i++) {
    sum += x;
}

X可以从其他线程访问。因此x被声明为一个易失性变量。

代码语言:javascript
复制
volatile int x;

我应该如何用Swift编写这段代码?

编辑的

抱歉,我的伪码不好。

我只是想读取最新的值属性或字段,而不是从线程缓存中读取。Java易失性使之成为可能。目标C也不稳定。(是吗?)

EN

回答 5

Stack Overflow用户

发布于 2015-11-20 15:03:21

目前在Swift中没有与volatile等效的内容。

在Swift中,您可以使用比volatile关键字更有效的方法来表示值的全局同步性--它不提供任何类型的原子性保证,必须与锁一起使用以建立关键部分。例如,您可以选择锁来同步对变量的读写访问。您可以选择使用MVar来指示一个变量应该在多个线程之间只有一个可能的有效状态。

或者你可以选择不用Swift来表达问题。如果您正在寻找volatile变量的确切行为(在您的情况下,这听起来不太可能),请使用C和C++。

票数 5
EN

Stack Overflow用户

发布于 2020-05-24 01:42:15

我将对@potatoswatter(优秀)的评论进行扩展。这里有几个误解

  • Volatile与可访问性无关。
  • 在这里,Volatile不是一个足够的构造,因为它确保了线程在访问该变量时的read一致性。您的用例涉及到mutationsx,因此需要更彻底的并发构造的synchronization。这是一个中等先进的概念,不属于swift的舵手。
票数 0
EN

Stack Overflow用户

发布于 2022-07-23 07:48:30

目前Swift 5中没有与volatile等效的,但是不需要任何等效,至少如果您的变量是类的成员变量的话。

volatile关键字-- CC++Objective-CObjective-C++Java语言--确实只要求编译器善意地而不是缓存变量的值(而是每次读取相关内存)。

另外,正如其他答复/评论所提到的,对于OP的情况,volatile是不够的(并且OP应该使用锁)。

示例

Swift对类成员似乎没有这么好的编译时缓存,因此不需要volatile关键字,我们可以这样做:

代码语言:javascript
复制
public class Volatile<T> {
    public var value: T;

    public init(_ defaultValue: T) {
        self.value = defaultValue;
    }
}

用法

代码语言:javascript
复制
var myVariable = Volatile("my value");

或者:

代码语言:javascript
复制
var myVariable: Volatile<String> = .init("my value");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24971489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档