【C/C++多線程編程之六】pthread互斥量

來源:互聯網
上載者:User

多線程編程之線程同步互斥量
      Pthread是 POSIX threads 的簡稱,是POSIX的線程標準。         Pthread線程同步指多個線程協調地,有序地同步使用共用資源。【C/C++多線程編程之五】pthread線程深入理解中講述到,多線程共用進程資源,一個線程訪問共用資源需要一段完整地時間才能完成其讀寫操作,如果在這段時間內被其他線程打斷,就會產生各種不可預知的錯誤。協調線程按一定的規則,不受打擾地訪問共用資源,保證正確性,這便是線程同步的出發點。       互斥量,是最簡單的線程同步機制,也是最常用的同步策略。              1.互斥量mutex

       互斥量是一種線程同步對象,“互斥”的含義是同一時刻只能有一個線程獲得互斥量。一個互斥量對應一個共用資源,互斥量狀態:1.解鎖狀態意味著共用資源可用,2.加鎖狀態意味著共用資源不可用。       一個線程需要使用共用資源時,使用thread_mutex_lock申請:1.當互斥量為解鎖狀態,則佔用互斥量,並給互斥量加鎖,佔用資源(互相量為加鎖狀態,其他線程不能使用互斥量並等待互斥量變為解鎖狀態),2.如果互斥量為加鎖狀態,則線程等待,直到互斥量為解鎖狀態(其他線程使用完共用資源後會解鎖互斥量,釋放資源)。
        2.互斥量基本函數                #include <pthread.h>
初始化互斥量:
        int pthread_mutex_init(pthread_mutex *mutex,
                                                const pthread_mutexattr_t* mutexattr);
        該函數第一個參數為一個互斥量指標,第二個參數為互斥量屬性指標(一般設為NULL)。該函數將按照互斥量屬性對互斥量進行初始化。互斥量加鎖:
        int pthread_mutex_lock(pthread_mutex *mutex);        該函數申請一個互斥量並對其進行加鎖,使該互斥量對其他線程不可用,讓其他申請互斥量的線程等待。
互斥量解鎖:
        int pthread_mutex_unlock(pthread_mutex *mutex);
        該函數對互斥量進行解鎖操作,使該互斥量對其他線程可以。
銷毀互斥量:
        int pthread_mutex_destroy(pthread_mutex *mutex);
        該函數銷毀一個不再需要的互斥量,釋放系統資源。                     3.牛刀小試              線程My_thread_1將共用資源字串Share寫成aaaaaaaa,線程My_thread_2則將其寫成eeeeeeee。       不啟用互斥量的情況下,兩個線程對共用資源的訪問是隨機並且無規律,相互幹擾打斷,產生a和e混合的字串,這顯然不是我們期望的結果。       啟用互斥量(去掉注釋)情況下,互斥量機制其作用,兩個線程同步協調地訪問共用資源Share,產生aaaaaaaa或eeeeeeee字串,符合我們的預期。          通過該樣本,讀者可以直觀地感受到互斥量的作用,親身體會互斥量機制,同時能讓讀者瞭解互斥量的內在原理。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.