pthread_once

有時候我們需要對一些posix變數只進行一次初始化,如執行緒鍵。如果我們進行多次初始化程式就會出現錯誤。 在傳統的順序編程中,一次性初始化經常通過使用布爾變數來管理。控制變數被靜態初始化為0,而任何依賴於初始化的代碼都能測試該變數。如果變數值仍然為0,則它能實行初始化,然後將變數置為1。以後檢查的代碼將跳過初始化。

一次性初始化

有時候我們需要對一些posix變數只進行一次初始化,如執行緒鍵。如果我們進行多次初始化程式就會出現錯誤。

在傳統的順序編程中,一次性初始化經常通過使用布爾變數來管理。控制變數被靜態初始化為0,而任何依賴於初始化的代碼都能測試該變數。如果變數值仍然為0,則它能實行初始化,然後將變數置為1。以後檢查的代碼將跳過初始化。

但是在多執行緒程式設計中,事情就變的複雜的多。如果多個執行緒並發地執行初始化序列代碼,可能有2個執行緒發現控制變數為0,並且都實行初始化,而該過程本該僅僅執行一次。

如果我們需要對一個posix變數靜態的初始化,可使用的方法是用一個互斥量對該變數的初始化進行控制。但有時候我們需要對該變數進行動態初始化,pthread_once就會方便的多。

介紹

相關詞條

熱門詞條

聯絡我們