2016-12-30 64 views
0

我经常遇到关键术语“线程安全”,并想知道它的含义。例如,在Firebase或Realm中,某些对象被视为“线程安全”。对于某些线程安全来说究竟意味着什么?在iOS中线程安全是什么意思?

+0

请在此处查看关于线程安全性的注释。相关。 http://stackoverflow.com/questions/588866/whats-the-difference-between-the-atomic-and-nonatomic-attributes/589392#589392 – bbum

+0

一些类似的讨论在这里,包括我的答案结尾的斯威夫特例子: http://stackoverflow.com/a/34386923/23649 – jtbandes

回答

0

搜索答案后,我从this网站的以下:

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

1

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

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

0

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