3

整数のベクトルが 2 つあります。ときどき、この 2 つを交換したいと思います (理由の詳細は後述します)。私が検討している 2 つのオプションは、swap 関数を使用するか、ポインターを交換することです。スワップは一定の時間で実行され、よりクリーンなアプローチのように見えます。

スワップの詳細: 複数のスレッドが最初のベクトルにアクセスしています。時折、ベクトルに対して長時間実行される計算を実行したいことがあります。他のスレッドからデータを収集したいので、別のスレッドにスワップして、この間他のスレッドが引き続き実行できるようにします

4

2 に答える 2

0

「整数のベクトルが 2 つあります。」

なんで?あなたが望むのは、複数のスレッドが(適切な同期で)アクセスできる単一のベクトルであるように見えます。

「長時間実行される関数」は、最初のベクトルのコピーに対してのみ動作する必要があります。コピーを作成するコード ( just vec2 = vec1;) も同期する必要があります。

swapスワップ後、ベクトルにアクセスするスレッドは、ベクトル内の古い値がなくなり、「2 番目の」ベクトルからの値しか表示されないことに気付くため、これはあなたが望むものではないかもしれません。2 番目のベクトルが最初のベクトルと同一でない限り、これらは同じではありません。つまり、それはコピーであり、ベクトルをそれ自体と交換したことを意味します...

于 2013-05-11T09:29:19.127 に答える