一潮尝、多線程服務(wù)器
- 線程的入口函數(shù)(回調(diào)函數(shù))
把之前
子進(jìn)程中的內(nèi)容
放到線程的入口函數(shù)
即可
- 子線程創(chuàng)建成功后窑滞,子線程進(jìn)入
入口函數(shù)
(與多進(jìn)程對(duì)比)主線程是不需要關(guān)閉clntfd的途事,因?yàn)槎嗑€程并沒(méi)有把
fd表
復(fù)制過(guò)來(lái)
因?yàn)槎嗑€程是共享
0~4G的內(nèi)存空間
的后室,那么變量
也是共享的(指向的套接字也是同一個(gè)
)躯护,如果關(guān)閉了fd本股,就相當(dāng)于釋放掉了套接字攀痊,那么后續(xù)就不能進(jìn)行讀寫(xiě)了。主線程創(chuàng)建線程成功后拄显,也會(huì)回到accept()繼續(xù)等待
子線程退出后苟径,也需要
回收線程
二、回收線程
回收TCB
join()
會(huì)等待子進(jìn)程退出躬审,因?yàn)橹骶€程阻塞在accept()那里棘街,不能再阻塞在join()
那里detach()
分離態(tài)回收線程,讓線程自己回收自己
在入口函數(shù)
mythread()
中設(shè)為分離態(tài)
那么主線程(創(chuàng)建子線程承边,回收子線程)就處理結(jié)束了
三遭殉、子線程
pthread_create()函數(shù)的【最后一個(gè)參數(shù)】是用來(lái)
傳參
的,可以傳值也可以傳地址
子線程的入口函數(shù)要退出的話博助,不能用exit()险污,因?yàn)閑xit()會(huì)退出整個(gè)進(jìn)程,因此我們使用
pthread_exit()
主線程不需要監(jiān)聽(tīng)
SIGCHLD信號(hào)
了子線程中也有
write()
的過(guò)程富岳,也要處理管道破裂的情況蛔糯,并且信號(hào)是會(huì)對(duì)進(jìn)程起作用的,而不是線程管道破裂
SIGPIPE
發(fā)出后城瞎,有一個(gè)默認(rèn)的執(zhí)行動(dòng)作渤闷,就是讓進(jìn)程掛掉,所以必須要處理SIGPIPE
這個(gè)信號(hào)