掃描二維碼
隨時(shí)隨地手機(jī)看文章
“為了減少進(jìn)程切換和創(chuàng)建開(kāi)銷,提高執(zhí)行效率和節(jié)省資源,我們引入了線程的概念,與進(jìn)程相比較,線程是CPU調(diào)度的一個(gè)基本單位?!?
當(dāng) Linux 最初開(kāi)發(fā)時(shí),在內(nèi)核中并不能真正支持線程。那為什么要使用多線程?
使用多線程的理由之一是和進(jìn)程相比,它是一種非常"節(jié)儉"的多任務(wù)操作方式。運(yùn)行于一個(gè)進(jìn)程中的多個(gè)線程,它們彼此之間使用相同的地址空間,共享大部分?jǐn)?shù)據(jù),啟動(dòng)一個(gè)線程所花費(fèi)的空間遠(yuǎn)遠(yuǎn)小于啟動(dòng)一個(gè)進(jìn)程所花費(fèi)的空間,而且,線程間彼此切換所需的時(shí)間也遠(yuǎn)遠(yuǎn)小于進(jìn)程間切換所需要的時(shí)間。
那么線程是干什么的呢?簡(jiǎn)要概括下線程的職責(zé):線程是程序中完成一個(gè)獨(dú)立任務(wù)的完整執(zhí)行序列。
線程的管理
創(chuàng)建線程
#include
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
- thread:線程id,唯一標(biāo)識(shí)
- attr:線程屬性,參數(shù)可選
- start_routine:線程執(zhí)行函數(shù)
- arg:傳遞給線程的參數(shù)
Demo1:創(chuàng)建一個(gè)線程
#include
#include
void *workThreadEntry(void *args)
{
char*str = (char*)args;
printf("threadId:%lu,argv:%s\n",pthread_self(),str);
}
int main(int argc,char *agrv[])
{
pthread_t thread_id;
char*str = "hello world";
pthread_create(