執行緒程式設計基本知識介紹

2021-04-21 08:15:10 字數 3820 閱讀 6407

執行緒程式設計基本知識介紹

執行緒程式設計基本知識介紹,常用執行緒函式列舉

與執行緒相關的函式可以分類歸結為以下幾個部分:

1)執行緒管理函式,包括執行緒的建立,退出,函式為

pthread_create,pthread_join,,pthread_exit,,pthread_self, pthread_cancel,

pthread_setcancelstate, pthread_setcanceltype, pthread_testcancel,

pthread_cleanup_push, pthread_cleanup_pop

2) 執行緒同步處理函式

pthread_mutex_lock, pthread_mutex_unlock, pthread_mutex_destory

pthread_cond_init,pthread_cond_wait,pthread_cond_destory, pthread_attr_sedetachstate

pthread_attr_init, pthread_attr_desotry等

3) 執行緒資料處理函式

pthread_key_create, pthread_getspecific, pthread_setspecific

4) 執行緒排程函式

pthread_attr_setschedpolicy,pthread_attr_getschedpolicy, pthread_attr_setschedparam,

pthread_attr_getschedparam

以上只是介紹一些常用到執行緒函式,還有許多函式,不再一一枚舉,對於函式的引數、使用,請參考系統的函式手冊。以下給出乙個最簡單的程式設計例子,同時說明在函式程式設計中正確退出執行緒的重要性,尤其是在應用程式需常見大量執行緒的情況下。

在aix系統中編譯連線posix的執行緒函式,使用編譯器cc_r, xlc_r, 或xlc_r, 可根據應用程式語言的不同選擇相匹配的編譯器。

程式norexit.c執行緒正確退出並釋放資源,原碼如下:

#include

#include

void *thfunc(void *arg)

int main(int argc, char **argv)

--else /* end if else */

} /* end for */

sleep(5);

printf("exit the main flow/n");

system(commandstr);

return 0;

}編譯連線此程式:

xlc_r –o norexit norexit.c

執行norexit程式輸出內容如下:

# ./norexit

before create thread, the resource in this proccess:

root 19730 0.0 0.0 1108 1120 pts/0 a 02:51:33 0:00 ./norexit

sequence number : 0

in thread, thread id : 258

root 19730 0.0 0.0 1160 1164 pts/0 a 02:51:33 0:00 ./norexit

thread id : 258 is exited

sequence number : 1

in thread, thread id : 259

root 19730 0.0 0.0 1180 1184 pts/0 a 02:51:33 0:00 ./norexit

thread id : 259 is exited

sequence number : 2

in thread, thread id : 260

root 19730 0.0 0.0 1180 1184 pts/0 a 02:51:33 0:00 ./norexit

thread id : 260 is exited

sequence number : 3

in thread, thread id : 261

root 19730 0.0 0.0 1180 1184 pts/0 a 02:51:33 0:00 ./norexit

thread id : 261 is exited

sequence number : 4

in thread, thread id : 262

root 19730 0.0 0.0 1180 1184 pts/0 a 02:51:33 0:00 ./norexit

thread id : 262 is exited

exit the main flow

root 19730 0.0 0.0 1180 1184 pts/0 a 02:51:33 0:00 ./norexit

從上面的輸出結果,可以看出,norexit對記憶體的使用基本時穩定的,下面給出的例子是

執行緒未退出的情況下記憶體使用情況,程式名為unnorexit.c

#include

#include

void *thfunc(void *arg)

int main(int argc, char **argv) /* end for */

-sleep(5);

-printf("exit the main flow/n");

-system(commandstr);

-return 0;

}編譯連線unnorexit.c程式

xlc_r –o unnorexit unnorexit.c

執行程式unnorexit,輸出結果如下:

# ./unnorexit

before create thread, the resource in this proccess:

root 18818 0.0 0.0 1112 1120 pts/0 a 02:56:54 0:00 ./unnorexit

sequence number : 0

in thread, thread id : 258

root 18818 0.0 0.0 1164 1164 pts/0 a 02:56:54 0:00 ./unnorexit

sequence number : 1

in thread, thread id : 515

root 18818 0.0 0.0 1188 1184 pts/0 a 02:56:54 0:00 ./unnorexit

sequence number : 2

in thread, thread id : 772

root 18818 0.0 0.0 1204 1196 pts/0 a 02:56:54 0:00 ./unnorexit

sequence number : 3

in thread, thread id : 1029

root 18818 0.0 0.0 1220 1208 pts/0 a 02:56:54 0:00 ./unnorexit

sequence number : 4

in thread, thread id : 1286

root 18818 0.0 0.0 1236 1220 pts/0 a 02:56:54 0:00 ./unnorexit

exit the main flow

root 18818 0.0 0.0 1236 1220 pts/0 a 02:56:54 0:00 ./unnorexit

從上面的輸出結果,可以看到,隨著執行緒的建立,記憶體使用逐漸增多。

總結以上部分,簡單介紹了posix的基本知識,即便程架構,詳細的資訊請參考aix系統

程式設計手冊及posix程式設計手冊。

redis基本知識介紹

redis相對memcache來說,支援了更多的資料型別,在使用場景上面無疑是更加的便捷 string 可以儲存任何形式的字串,內部實現結構有int,sds dynamisc string 當值為整型時,使用int結構存放,非整型時使用sds儲存 list 當list的節點小於配置 hash max...

Zookeeper基本知識介紹

1 什麼是zookeeper zookeeper是乙個分布式開源框架,提供了協調分布式應用的基本服務,它向外部應用暴露一組通用服務 分布式同步 distributed synchronization 命名服務 naming service 集群維護 group maintenance 等,簡化分布式...

shell程式設計基本知識點介紹

bash簡介 bash 命令列型別的shell。shell 計算機和使用者的互動介面。執行任何乙個指令碼都是啟動乙個新的bash去執行。乙個簡單的bash程式例子 是用來說明這個檔案的型別的 bin bash 表明這個是bash程式 echo 語句的功能是把 echo 後面的字串輸出到標準輸出中去 ...