1

ここから私はそれを読んだ

共有データへのすべての参照がシリアル化されるため、呼び出しで共有データが使用される場合でも、スレッド セーフ関数は複数のスレッドから同時に呼び出すことができます。

一度に 1 つのスレッドのみがアクセスできるように、ロックを使用してコードのセグメントをスレッド セーフにする必要があることはわかっています。しかし、ここでは、すべてのデータがシリアル化されているため、スレッドセーフな関数を同時に呼び出すことができると言っています。参照をシリアル化することで関数をスレッド セーフにする方法がわかりません。ありがとう。

4

3 に答える 3

2

参照をシリアル化することで関数をスレッド セーフにする方法がわかりません。

あなたは少し誤解しています。参照をシリアル化するのではなく、参照へのアクセスをシリアル化しています。

ロックを使用して参照を保護すると、参照へのアクセスは一度に 1 つのスレッドでしか使用できなくなります。したがって、これはシリアルであり、パラレルではありません。したがって、スレッドセーフです。

于 2013-09-10T05:53:34.087 に答える
1

シリアライゼーションはロックと同義の場合があります。QMutexLockerこの記事の「スレッド セーフ」の部分を読むと、それらがグローバル データへのアクセスに使用されていることがわかります。なぜ彼らはこれをシリアライゼーションと呼ぶのですか?コードのすべての重要な部分はミューテックスによって保護されており、実際には異なるスレッドから実行された場合でも連続して実行されるためです。

マルチスレッド環境でのシリアライゼーションは、同時要求を単一のスレッドにリダイレクトすることを意味する場合があります。単一のスレッドには、着信コマンド キューがあり、これらの要求を連続して処理します。意味は同じです - 同時リクエストはシリアル化されます。つまり、並行して実行することはできません。

于 2013-09-10T05:51:42.573 に答える