閱讀406 返回首頁    go 阿裏雲 go 技術社區[雲棲]


C++編程規範之12:懂得何時和如何進行並發性編程

摘要:

    如果應用程序使用了多個線程或者進程,應該知道如何盡量減少共享對象,以及如何安全地共享必須共享的對象。

在多線程和並發編程中最重要的是要避免死鎖、活鎖和惡性的競爭條件。

    在編寫多線程程序時要注意做到以下幾點:

    1.參考目標平台的文檔,了解該平台的同步化原語。

    2.最好將平台的原語用自己設計的抽象包裝起來。

    3.確保正在使用的類型在多線程程序中是安全的。要做到保證非共享的對象獨立和記載調用者在不同的線程中使用該類型的同一個對象需要做什麼。

    在自己編寫的可用於多線程程序的類型時,必須完成兩項任務。首先,必須保證不同線程能夠不加鎖地使用該類型的不同對象。其次,必須在文檔中說明使用者在不同線程中使用該類型的同一個對象需要做什麼,基本的設計問題是如何在類極其客戶之間分配正確執行。主要的選擇有以下幾個方麵:

    1.外部加鎖,調用者負責加鎖。

    2.內部加鎖,每個對象將所有對自己的訪問串行化,通常采用為每個公用成員函數加鎖的方法來實現,這樣調用者就可以不用串行化對象的使用了。

    3.不加鎖的設計,包括不變性。

最後更新:2017-04-03 12:53:42

  上一篇:go 有關library導入的個人總結和反思
  下一篇:go 連載:麵向對象葵花寶典:思想、技巧與實踐(1) - 程序設計思想的發展