int pthread_once(pthread_once_t *once_control,void(*init_routine)(void));
引數:once_control 控制變數
init_routine 初始化函式
返回值:
若成功返回0,若失敗返回錯誤編號。
型別為pthread_once_t的變數是乙個控制變數。控制變數必須使用pthread_once_init巨集靜態地初始化。
pthread_once函式首先檢查控制變數,判斷是否已經完成初始化,如果完成就簡單地返回;否則,pthread_once呼叫初始化函式,並且記錄下初始化被完成。如果在乙個執行緒初始時,另外的執行緒呼叫pthread_once,則呼叫執行緒等待,直到那個現成完成初始話返回。
下面就是該函式的程式例子:
#define _multi_threaded#include #include #define numthreads 3
int number = 0;
int okstatus = 777;
pthread_once_t oncecontrol = pthread_once_init;
static void checkresults(char *string, int rc)void initroutine(void)void *threadfunc(void *parm)int main(int argc, char **argv) for (i=0; i < numthreads; ++i) } if (number != 1) printf("one-time init routine called exactly once\n"); printf("main completed\n"); return 0;}return;
}
編譯 gcc -o pthread_once -lpthread pthread_once.c
執行結果:enter testcase - ./pthread_oncecreate thread 0
create thread 1
create thread 2
wait for thread 0
inside secondary thread
in the initroutine
inside secondary thread
secondary thread failed
多執行緒程式設計學習筆記(六)
多執行緒程式設計學習筆記 六 執行緒區域性儲存 tls 存放區域性儲存步驟 1 申請資料槽 localdatastoreslot slot thread.getnameddataslot para 如果不存在名為para的資料槽,將分配乙個所有執行緒均可用的para資料槽 2 往資料槽存放資料 my...
六 多執行緒 CAS
鎖的開銷極大。在某些場景,如保證乙個變數的 read modify write操作的原子性。這種場景可以通過使用cas解決而不需要用到鎖。unsafe類中通過cas修改int型別變數原始碼。var1 atomicinteger物件 var2 記憶體偏移量 var4 增加的值 var5 獲取的變數原值...
多執行緒六 dispatch semaphore
一 定義 訊號量的初始值為1,代表同時只允許1條執行緒訪問資源,保證執行緒同步 例子 執行緒10 7 6 9 8 void test dispatch time的宣告如下 dispatch time t dispatch time dispatch time t when,int64 t delta...