gpt4 book ai didi

objective-c - Objective C,将 Java 中的 volatile 转换为 Objective C 的最佳方法是什么?

转载 作者:太空狗 更新时间:2023-10-30 03:39:10 26 4
gpt4 key购买 nike

我正在尝试将 Java 代码转换为 Objective C 代码。并且 java 代码包含定义为 volatile 的变量。我在网上查看了 java 中的“volatile”用法,如下所示

 Essentially, volatile is used to indicate that a variable's value will be modified by different threads.

所以,如果我要在 Objective C 中将变量设置为 volatile 因为变量将被不同的线程访问,那么我不需要将这些变量设置为 volatile 因为我可以将这些变量设置为原子的?

最佳答案

volatile 关键字也存在于 Objective-C 中。你可以使用它。

这是因为 Objective-C 是 C 的超集。

将属性声明为 atomic 不会更正 volatile 的本意。 volatile 有效地告诉编译器不要优化对该变量所做的检查,因为当编译器期望它保持不变时它可能已经改变。

最简单的例子就是这个。假设我们有一个全局变量声明为:

int packetsReceived = 0;

后来是这样使用的:

packetsRecieved = 0;

while (packetsRecieved < 10){
//Wait for more packets
}

processPackets();

我们永远不会通过那个循环,因为编译器会说“嘿,packetsRecieved 在那个循环中永远不会被修改,因此它将无限运行。”结果,它只会使它成为一个直接的无限循环,这样就可以避免每次都检查。

如果我们改为将变量声明为:

volatile int packetsRecieved;

我们告诉编译器这个变量可能随时改变,即使它看起来应该保持不变。因此在我们的示例中,编译器生成的机器代码仍将检查条件,我们的程序将按预期运行。

关于objective-c - Objective C,将 Java 中的 volatile 转换为 Objective C 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5334691/

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