iOS中线程安全的东西意味着什么?

时间:2016-12-30 17:27:36

标签: ios swift thread-safety

我经常遇到关键术语“线程安全”,并想知道这意味着什么。例如,在Firebase或Realm中,某些对象被视为“线程安全”。什么对线程安全有什么意义?

5 个答案:

答案 0 :(得分:4)

如果多个线程可以调用方法或访问对象的成员数据而没有任何问题,则称对象是线程安全的;一个“问题”被广义地定义为仅从一个线程访问时的行为背离。

例如,包含常规整数i = i + 1的代码i的对象是线程安全的,因为两个线程可能会遇到该语句而一个线程可能会读取i的原始值,递增它,然后写回该单个递增的值;所有与另一个线程同时出现。这样,i只会增加一次,应该增加两次。

答案 1 :(得分:3)

线程不安全 - >如果任何对象允许同时修改多个线程。 线程安全 - >如果任何对象不允许同时修改多个线程。可变对象通常是线程安全的

答案 2 :(得分:1)

在搜索答案后,我从this网站获得了以下内容:

  

可以从多个线程或并发任务安全地调用线程安全代码,而不会导致任何问题(数据损坏,崩溃等)。非线程安全的代码一次只能在一个上下文中运行。线程安全代码的一个例子是让a = [“线程安全”]。此数组是只读的,您可以同时从多个线程使用它而不会出现问题。另一方面,使用var a = [“thread-unsafe”]声明的数组是可变的并且可以修改。这意味着它不是线程安全的,因为几个线程可以同时访问和修改数组,结果不可预测。变量和数据结构是可变的,而不是固有的线程安全的,一次只能从一个线程访问。

答案 3 :(得分:0)

Thread safe意味着您的程序可以按预期工作。这与多线程环境有关,shared resource存在问题。依次创建:Atomicity, Visibility, Ordering [About]

Apple通过Synchronization Tools为我们提供了

Atomicity

  • Atomic Operations-基于硬件指令的无锁机制,例如Compare-And-Swap(CAS)

Visibility

  • Volatile Variable-从内存中读取值(无缓存)

Ordering

  • Memory Barriers-保证最新数据[About]

其他

  • Locks
    • MutexSemaphore的一种,其中线程可以获取,并且可以作为单个入侵者使用块,其他所有线程将被阻塞,直到发布
  • ...

答案 4 :(得分:0)

举个简单的例子。如果某些内容在多个线程之间共享而没有任何崩溃等问题,则它是线程安全的。例如,如果您有一个常量 (let value = ["Facebook"]) 并且它在多个线程之间共享,则它是线程安全的,因为它是只读的且无法修改。而如果你有一个变量(var value = ["Facebook"]),当与多个线程共享时,它可能会导致潜在的崩溃或数据丢失,因为它的数据是可以修改的。