pthread once 的使用方法

2021-06-19 11:53:51 字數 976 閱讀 5422

int pthread_once(pthread_once_t *once_control, void (*init_routine) (void))

這個函式使用初值為pthread_once_init的once_control變數保證init_routine()函式在本程序執行序列中僅執行一次。

#include2 #include3

4 pthread_once_t once=pthread_once_init;

5 6 void run(void)

7 10 void *thread1(void)

11 17 void *thread2(void)

18 24 int main()

25 33

執行結果:

current thread's id is 3070696304

function run is running in thread 3070696304

thread2 ends

current thread's id is 3079089008

thread1 ends

main thread exit!

linuxthreads使用互斥鎖和條件變數保證由pthread_once()指定的函式執行且僅執行一次,而once_control則表徵是否執 行過。如果once_control的初值不是pthread_once_init(linuxthreads定義為0),pthread_once() 的行為就會不正常。在linuxthreads中,實際"一次性函式"的執行狀態有三種:never(0)、in_progress(1)、done (2),如果once初值設為1,則由於所有pthread_once()都必須等待其中乙個激發"已執行一次"訊號,因此所有pthread_once ()都會陷入永久的等待中;如果設為2,則表示該函式已執行過一次,從而所有pthread_once()都會立即返回0。

pthread once詳解和使用

pthread once 函式詳解 pthread once 使用 在多執行緒環境中,有些事僅需要執行一次。通常當初始化應用程式時,可以比較容易地將其放在main函式中。但當你寫乙個庫時,就不能在main裡面初始化了,你可以用靜態初始化,但使用一次初始化 pthread once 會比較容易些。in...

pthread once與執行緒安全的單例模式

在單例模式的class設計的時候,常常會看到一種寫法 if null return 這個辦法叫做double check locking 縮寫為dcl 在 linux多執行緒服務端 一書中,作者提出dcl已經靠不住,並提出了使用pthread once來實現單例的執行緒安全。include int ...

iOS MBProgressHUD的使用方法

mbprogresshud就是乙個非常好用的第三方庫,可以快速接入載入的介面,下面貼 下面的 包含了各種常用型別的載入 import viewcontroller.h import mbprogresshud.h inte ce viewcontroller property atomic,assi...