Linux多執行緒學習(六)pthread once

2021-06-09 06:43:55 字數 1294 閱讀 9039

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) 

return;

}

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;}
編譯 gcc -o pthread_once -lpthread pthread_once.c
執行結果:enter testcase - ./pthread_once

create 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...