2016-12-30 10 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 Webサイトから次のことを得たが:

スレッドセーフなコードが安全に何らかの問題(データの破損、クラッシュ、など)を発生させることなく、複数のスレッドまたは同時タスクから呼び出すことができます。スレッドセーフではないコードは、一度に1つのコンテキストでのみ実行する必要があります。スレッドセーフなコードの例はlet a = ["thread-safe"]です。この配列は読み取り専用で、複数のスレッドから同時に問題なく使用することができます。一方、var a = ["thread-unsafe"]で宣言された配列は変更可能であり、変更することができます。つまり、複数のスレッドが予期しない結果で同時にアレイにアクセスしたり変更したりすることができるため、スレッドセーフではありません。変更可能で本質的にスレッドセーフではない変数およびデータ構造は、一度に1つのスレッドからのみアクセスする必要があります。

1

複数のスレッドがメソッドを呼び出したり、オブジェクトのメンバーデータに問題なくアクセスできる場合、オブジェクトはスレッドセーフであると言われます。 「問題」は広義には、1つのスレッドからのみアクセスされた場合の動作からの逸脱であると定義されています。 2つのスレッドがそのステートメントが発生することがありますし、一つのスレッドがiの元の値を読んで、それをインクリメントし、その後、書き戻し可能性があるため、通常の整数iのコードi = i + 1を含むオブジェクトがは、スレッドセーフではありません例えば

その単一増分値。すべて同時に別のスレッドとなります。このようにして、iは1回だけインクリメントされ、2回インクリメントされるはずです。

0

スレッド不安 - >任意のオブジェクトが同時に複数のスレッドで変更を許可する場合。 スレッドセーフ - >同時に複数のスレッドで変更が許可されていないオブジェクト。一般にスレッドセーフです。

関連する問題