pthread_once()操作
pthread_once()
[@more@]pthread_once()操作 僅執行一次的操作
int pthread_once(pthread_once_t *once_control, void (*init_routine) (void))
本函式使用初值為PTHREAD_ONCE_INIT的once_control變數保證init_routine()函式在本程式執行序列中僅執行一次。
#include
#include
pthread_once_t once=PTHREAD_ONCE_INIT;
void once_run(void)
{
printf("once_run in thread
%dn",pthread_self());
}
void * child1(void *arg)
{
int tid=pthread_self();
printf("thread %d entern",tid);
pthread_once(&once,once_run);
printf("thread %d returnsn",tid);
}
void * child2(void *arg)
{
int tid=pthread_self();
printf("thread %d entern",tid);
pthread_once(&once,once_run);
printf("thread %d returnsn",tid);
}
int main(void)
{
int tid1,tid2;
printf("hellon");
pthread_create(&tid1,NULL,child1,NULL);
pthread_create(&tid2,NULL,child2,NULL);
sleep(10);
printf("main thread exitn");
return 0;
}
once_run()函式僅執行一次,且究竟在哪個執行緒中執行是不定的,儘管pthread_once(&once,once_run)出現在兩個執行緒中。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23168012/viewspace-1045837/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- pthread_once導致死鎖thread
- pthread_once詳解和使用thread
- JQ操作標籤--樣式操作、 位置操作、尺寸、 文字操作、 獲取值操作、 屬性操作、文件處理、事件事件
- sqlite相關--------adb shell操作,工具操作,程式操作SQLite
- Go 操作 Redis 的基本操作GoRedis
- 常用操作 / 資料庫操作資料庫
- 原子操作 vs 非原子操作
- 操作
- 坐下坐下,基本操作(ZooKeeper 操作篇)
- JavaScript騷操作之操作符JavaScript
- Java檔案操作 讀寫操作Java
- Hive高階操作-查詢操作Hive
- 使用java操作ranger,hdfs ranger授權操作,hive ranger授權操作JavaRangerHive
- Go 語言操作 MySQL 之 CURD 操作GoMySql
- Oracle並行操作——並行DML操作Oracle並行
- js操作JS
- gorm 操作GoORM
- firewalld操作
- DOM 操作
- docker操作Docker
- Jedis操作
- Git 操作Git
- BOM操作
- mongoDB操作MongoDB
- DOM操作
- npm 操作NPM
- SourceTree 操作
- mysql操作MySql
- 操作欄
- 操作格子
- 快捷操作
- fileStream操作
- maven 操作Maven
- 奇怪++操作
- IO操作
- 操作cookieCookie
- rman操作
- Sqlldr操作SQL