2

2 つの方法で機能するミューテックスを実装する必要があります。1. 複数のクラスからリソースを保護し、2. スロットであり、再入可能であるクラスのメソッドからリソースを保護します。例 (疑似 C++):

Class A {
  function aaa() {
    QMutex mutex;
    mutex.lock();
    globalvar++;
    mutex.unlock()
  }
}

Class B {
  function bbb() {
    QMutex mutex;
    mutex.lock();
    globalvar++;
    mutex.unlock()
  }
}
  1. A.aaa によって中断された A.aaa が処理されるため、シナリオ 2 がカバーされているというこの投稿を読みました (どういうわけか Qt/OS は、保護されているのと同じリソースであることを認識しています。そうですか?

  2. A.aaa と B.bbb が同じリソースを保護している場合、Qt/OS は同じリソース/ミューテックスを認識していないため、機能しないと思いますか? 複数の無関係なクラスが安全にアクセスできるように、変数ミューテックスはグローバルである必要があるということですか?

4

1 に答える 1

1

A.aaa によって中断された A.aaa が処理されるため、シナリオ 2 がカバーされているというこの投稿を読みました (どういうわけか Qt/OS は、保護されているのと同じリソースであることを認識しています。そうですか?

はい、ロックがスコープに関連付けられている場合は、ロック解除を忘れるというミスを避けるために QMutexLocker を使用する必要があるようです。これはC++ ではRAIIと呼ばれます。

厳密に言えば、リソースのロックを担当するのは QMutex です。

A.aaa と B.bbb が同じリソースを保護している場合、Qt/OS は同じリソース/ミューテックスを認識していないため、機能しないと思いますか? 複数の無関係なクラスが安全にアクセスできるように、変数ミューテックスはグローバルである必要があるということですか?

まれなシナリオですが、はい。カスタム構造体のように、グローバル変数を型にラップしたい場合があります。

于 2013-10-03T07:36:29.210 に答える