0

使用すべきかどうかわからないシナリオが 2QMutexつあります。プログラムをQMutex何度も実行しましたが、異常な動作は見られませんでした。簡単にするために、ここでコードをざっと見ました。しかし、安全面として、使用する必要があるかどうかを知りたいQMutexですか?

シナリオ #1:

 class A : QObject
 {
    Q_OBJECT

    private double **array;//it is initialised in the constructor & is 100x100

    slots:
          slot1(); //2 Qthreads are created in my main GUI thread along with 2 objects of class A, & by A aobj.movetothread();
          slot2(); //& connecting these 2 slots to started() SIGNAL of respective QThread's
                   //I have multi-threaded my application.
 }

 A::slot1()
 {
    double temp = array[i][j];
    //some operations on temp
 }

 A::slot2()
 {
    double temp = array[i][j];
    //some operations on temp
 }

注: の内容はarray[][]、初期化後に変更されません。2 つのスレッドで情報にアクセスしているだけです。ただし、同じ要素が両方のスレッドから同時にアクセスされる場合があります。array

シナリオ 2

 A::slot1()
 {
    double temp = somefunc();
    array[0][j] = temp;
 }

 A::slot2()
 {
    double temp = somefunc();
    array[50][j] = temp;
 }

注: この場合、2 つのスレッドは同じ配列の要素を変更しますが、共通の要素を変更/アクセスしません。つまり、スレッド1 は最初の50 行を処理し、スレッド2 は次の 50 行を処理しますが、行にはアクセスしません。お互いの。

4

1 に答える 1

1

これらのシナリオが一緒に実行されない場合、ミューテックスは必要ありません。2 つのスレッドから読み取るためにデータにアクセスすることは問題ありません。同じ配列の異なる要素を 2 つ (またはそれ以上のスレッド) で変更することも問題ありません。ミューテックスが必要なケースは、2 つのスレッドが配列から同じ要素を変更する場合、またはのスレッドから同じ要素を読み取りながら 1 つのスレッドから同じ要素を変更する場合です。

于 2013-01-27T09:51:34.773 に答える