<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # QMutex Class Reference ## [[QtCore](index.htm) module] 該QMutex類提供線程之間的訪問串行化。[More...](#details) ### Types * `enum RecursionMode { NonRecursive, Recursive }` ### Methods * `__init__ (self, RecursionMode?mode?=?QMutex.NonRecursive)` * `lock (self)` * `bool tryLock (self)` * `bool tryLock (self, int?timeout)` * `unlock (self)` * * * ## Detailed Description 該QMutex類提供線程之間的訪問串行化。 一個QMutex的目的是保護的對象,數據結構或代碼部分,以便只有一個線程可以在同一時間訪問它(這類似于Java`synchronized`關鍵字)。它通常是最好使用一個互斥與[QMutexLocker](qmutexlocker.html)因為這可以很容易地確保鎖定和解鎖一貫執行。 例如,假設有一個打印一條消息,兩行用戶的方法: ``` int number = 6; void method1() { number *= 5; number /= 4; } void method2() { number *= 3; number /= 2; } ``` 如果這兩種方法稱為連續,會發生以下情況: ``` // method1() number *= 5; // number is now 30 number /= 4; // number is now 7 // method2() number *= 3; // number is now 21 number /= 2; // number is now 10 ``` 如果這兩種方法都從兩個線程同時調用然后按下列順序會導致: ``` // Thread 1 calls method1() number *= 5; // number is now 30 // Thread 2 calls method2(). // // Most likely Thread 1 has been put to sleep by the operating // system to allow Thread 2 to run. number *= 3; // number is now 90 number /= 2; // number is now 45 // Thread 1 finishes executing. number /= 4; // number is now 11, instead of 10 ``` 如果我們添加了一個互斥體,我們應該得到我們想要的結果: ``` QMutex mutex; int number = 6; void method1() { mutex.lock(); number *= 5; number /= 4; mutex.unlock(); } void method2() { mutex.lock(); number *= 3; number /= 2; mutex.unlock(); } ``` 那么只有一個線程可以修改`number`在任何給定的時間,其結果是正確的。這是一個簡單的例子,當然,但適用于任何其他情況下的事情需要發生在一個特定的順序。 當你調用[lock](qmutex.html#lock)( )在一個線程,其它試圖調用線程[lock](qmutex.html#lock)( )在同一個地方會阻塞,直到獲得該鎖調用的線程[unlock](qmutex.html#unlock)( ) 。非阻塞的替代品[lock](qmutex.html#lock)()是[tryLock](qmutex.html#tryLock)( ) 。 * * * ## Type Documentation ``` QMutex.RecursionMode ``` | Constant | Value | Description | | --- | --- | --- | | `QMutex.Recursive` | `1` | 在這種模式下,一個線程可以鎖定同一互斥多次和互斥不會被解鎖,直到相應數量的[unlock](qmutex.html#unlock)( )的調用而制定的。 | | `QMutex.NonRecursive` | `0` | 在這種模式下,一個線程可能只鎖定一個互斥體一次。 | **See also** [QMutex](qmutex.html#QMutex)( ) 。 * * * ## Method Documentation ``` QMutex.__init__ (self, RecursionMode?mode?=?QMutex.NonRecursive) ``` 構造一個新的互斥體。互斥鎖處于未鎖定狀態下創建。 If _mode_ is [QMutex.Recursive](qmutex.html#RecursionMode-enum),一個線程可以鎖定同一互斥多次和互斥不會被解鎖,直到相應數量的[unlock](qmutex.html#unlock)( )的調用而制定的。默認值是[QMutex.NonRecursive](qmutex.html#RecursionMode-enum)。 **See also** [lock](qmutex.html#lock)()和[unlock](qmutex.html#unlock)( ) 。 ``` QMutex.lock (self) ``` 鎖定互斥鎖。如果另一個線程已鎖定互斥鎖,則該調用將被阻塞,直到該線程已經解鎖了。 調用此函數從同一個線程相同的互斥體多次是允許的,如果這個互斥體是一個[recursive mutex](qmutex.html#RecursionMode-enum)。如果這個互斥體是一個[non-recursive mutex](qmutex.html#RecursionMode-enum),此功能將_dead-lock_當互斥鎖遞歸鎖定。 **See also** [unlock](qmutex.html#unlock)( ) 。 ``` bool QMutex.tryLock (self) ``` 試圖鎖定互斥。如果獲得了鎖,這個函數返回True。如果另一個線程已鎖定互斥鎖,則該函數立即返回False 。 如果獲得了鎖,互斥鎖必須被解鎖[unlock](qmutex.html#unlock)( )之前,另一個線程可以成功地將其鎖定。 調用此函數從同一個線程相同的互斥體多次是允許的,如果這個互斥體是一個[recursive mutex](qmutex.html#RecursionMode-enum)。如果這個互斥體是一個[non-recursive mutex](qmutex.html#RecursionMode-enum),此功能將_always_嘗試以遞歸方式鎖定互斥時返回False 。 **See also** [lock](qmutex.html#lock)()和[unlock](qmutex.html#unlock)( ) 。 ``` bool QMutex.tryLock (self, int?timeout) ``` 這是一個重載函數。 試圖鎖定互斥。如果獲得了鎖這個函數返回True,否則返回False 。如果另一個線程已鎖定互斥鎖,則此功能將等待最多_timeout_毫秒互斥體變得可用。 注意:傳遞一個負數作為_timeout_相當于調用[lock](qmutex.html#lock)( ) ,即該函數將一直等待,直到互斥量能,如果被鎖定_timeout_是負的。 如果獲得了鎖,互斥鎖必須被解鎖[unlock](qmutex.html#unlock)( )之前,另一個線程可以成功地將其鎖定。 調用此函數從同一個線程相同的互斥體多次是允許的,如果這個互斥體是一個[recursive mutex](qmutex.html#RecursionMode-enum)。如果這個互斥體是一個[non-recursive mutex](qmutex.html#RecursionMode-enum),此功能將_always_嘗試以遞歸方式鎖定互斥時返回False 。 **See also** [lock](qmutex.html#lock)()和[unlock](qmutex.html#unlock)( ) 。 ``` QMutex.unlock (self) ``` 解鎖互斥量。嘗試在不同的線程在一個鎖定它會導致一個錯誤解除鎖定互斥鎖。解鎖未在不確定的行為鎖定的互斥鎖。 **See also** [lock](qmutex.html#lock)( ) 。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看