日韩天堂,国产精品久久久久久久久久一区,羞羞羞网站,自拍视频网站,久久亚洲欧美成人精品,桃花阁成人网在线观看

Hello! 歡迎來(lái)到小浪云!


你真的懂Linux線程和信號(hào)的關(guān)系嗎?


引言:

在討論信號(hào)時(shí),我們通常更多地從進(jìn)程的角度去理解,但當(dāng)一個(gè)進(jìn)程包含多個(gè)線程時(shí),進(jìn)程、線程、信號(hào)之間的關(guān)系會(huì)是怎樣呢?

1. 線程與信號(hào)的關(guān)聯(lián)

線程與信號(hào)的關(guān)系遵循以下幾個(gè)標(biāo)準(zhǔn):

  • 標(biāo)準(zhǔn)1:同一線程組的線程共享信號(hào)處理函數(shù)。
  • 標(biāo)準(zhǔn)2:線程擁有獨(dú)立的信號(hào)阻塞集。
  • 標(biāo)準(zhǔn)3:存在私有未決信號(hào)隊(duì)列和共享未決信號(hào)隊(duì)列。
  • 標(biāo)準(zhǔn)4:當(dāng)收到致命信號(hào)時(shí),線程組將退出。

2.同一線程組線程之間共享信號(hào)處理函數(shù)(標(biāo)準(zhǔn)1)。

創(chuàng)建進(jìn)程時(shí),線程task_struct對(duì)象sighand成員會(huì)指向主線程指向的struct sighand_Struct對(duì)象,線程組所有線程共享主線程信號(hào)表。

原來(lái)的進(jìn)程此時(shí)理解為主線程。

你真的懂Linux線程和信號(hào)的關(guān)系嗎?

**3.線程有獨(dú)立的阻塞信號(hào)集(*標(biāo)準(zhǔn)2*)。

每個(gè)線程task_struct都有各自的阻塞/屏蔽信號(hào)集(blocked成員)。

通過(guò)pthread_sigmask可以設(shè)置阻塞/屏蔽信號(hào)集,用來(lái)屏蔽特定的信號(hào),

進(jìn)程(主線程)可以由sigprocmask函數(shù)或者pthread_sigmask函數(shù)來(lái)設(shè)置阻塞/屏蔽信號(hào)集。

sigprocmask函數(shù)和pThread_sigmask底層實(shí)現(xiàn)方式一樣,沒有區(qū)別。

你真的懂Linux線程和信號(hào)的關(guān)系嗎?


pthread_sigmask函數(shù)原型

int pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset);

功能:pthread_sigmask函數(shù)用于設(shè)置線程阻塞信號(hào)集。

參數(shù):

how:表示信號(hào)屏蔽字的修改方式。可以取以下三個(gè)值之一:

  • SIG_BLOCK:將set指定的信號(hào)添加到進(jìn)程的當(dāng)前信號(hào)屏蔽字中。
  • SIG_UNBLOCK:將set指定的信號(hào)從進(jìn)程的當(dāng)前信號(hào)屏蔽字中移除。
  • SIG_SETMASK:將當(dāng)前信號(hào)屏蔽字設(shè)置為set指定的值。

set:指向需要修改的新信號(hào)屏蔽字集合的指針

oldset:指向保存之前信號(hào)屏蔽字的集合的指針

返回值:

成功:返回0。

失敗:返回-1,并設(shè)置errno

===========================================

文章沒看懂沒關(guān)系,每篇文章都有視頻講解:

圖解Linux環(huán)境編程視頻課程(完整版)正式發(fā)布了!!!

===========================================


**4.私有未決信號(hào)隊(duì)列和共享未決信號(hào)隊(duì)列(*標(biāo)準(zhǔn)3*)。

每個(gè)線程task_struct都有各自的未決信號(hào)隊(duì)列(pending成員)。

每個(gè)線程組主線程有一個(gè)共享未決信號(hào)隊(duì)列(signal成員),其他線程共享主線程共享未決信號(hào)隊(duì)列。

當(dāng)主線程收到信號(hào)后,如果主線程設(shè)置了阻塞/屏蔽信號(hào)集,那么該信號(hào)會(huì)存儲(chǔ)在共享未決信號(hào)隊(duì)列,比如通過(guò)kill或者sigqueue函數(shù)發(fā)送給主線程的信號(hào)。

其他線程收到信號(hào)后,如果線程設(shè)置了阻塞/屏蔽信號(hào)集,那么該信號(hào)會(huì)存儲(chǔ)在私有未決信號(hào)隊(duì)列,比如通過(guò)tkill,tgkill,pthread_kill,以及pthread_sigqueue函數(shù)發(fā)送給線程的信號(hào)。

你真的懂Linux線程和信號(hào)的關(guān)系嗎?

共享未決信號(hào)隊(duì)列信號(hào)如何處理?

  • 主線程優(yōu)先處理共享未決信號(hào)隊(duì)列信號(hào)。
  • 其他線程在主線程不方便處理時(shí),才會(huì)處理共享未決信號(hào)隊(duì)列信號(hào)。

tkill函數(shù)原型

int tkill(int tid, int sig);

int tgkill(int tgid, int tid, int sig);

描述:

tkill函數(shù)用于發(fā)送信號(hào)到指定線程,tid表示線程ID,sig表示信號(hào)編號(hào),不安全盡量少用。

tgkill函數(shù)用于向指定線程發(fā)送信號(hào),tgid表示線程組ID,tid表示線程ID,sig表示信號(hào)編號(hào)。

返回值:

成功:返回0。

失敗:返回-1,并設(shè)置errno


pthread_kill函數(shù)原型

int pthread_kill(pthread_t thread, int sig);

功能:pthread_kill函數(shù)用于向指定線程發(fā)送信號(hào)的函數(shù)。

參數(shù):

thread:為目標(biāo)線程的標(biāo)識(shí)。

sig:要發(fā)送的信號(hào)的編號(hào)。

返回值:

成功:返回0。

失敗:返回errno


pthread_sigqueue函數(shù)原型

int pthread_sigqueue(pthread_t thread, int sig,

const union sigval value); 

功能:pthread_sigqueue函數(shù)是一個(gè)用于向指定線程發(fā)送信號(hào)及數(shù)據(jù)的函數(shù)。

pthread_sigqueue使用方法可以參考sigqueue函數(shù)。

參數(shù):

thread:為目標(biāo)線程的線程標(biāo)識(shí)符

sig:為要發(fā)送的信號(hào)編號(hào)。

value:為發(fā)送給目標(biāo)線程的附加數(shù)據(jù)。

返回值:

成功:返回0。

失敗:返回errno。


常用產(chǎn)生信號(hào)函數(shù)對(duì)比:

你真的懂Linux線程和信號(hào)的關(guān)系嗎?

5.收到致命信號(hào),線程組退出(標(biāo)準(zhǔn)4)。

所謂致命信號(hào)就是能讓線程終止的信號(hào),可查看信號(hào)默認(rèn)處理方式表。

這一條標(biāo)準(zhǔn)的目的是為了實(shí)現(xiàn)同一線程組里線程的統(tǒng)一退出管理。

相關(guān)閱讀

主站蜘蛛池模板: 无遮免费网站在线入口 | 久久久久久国产精品视频 | 久久久999国产精品 久久精品免费观看 | 中国在线观看www视频 | 最新日本中文字幕 | 成人羞羞视频在线观看免费 | 日韩综合在线视频 | 久久久精品波多野结衣电影 | 全免费a级毛片免费看 | 四虎www| 自拍偷拍图区 | 免费久久精品 | 欧美大片一区二区三区 | 噜噜噜在线视频 | 亚洲精品免费在线视频 | 久久国产视频网 | 成人精品一区二区三区中文字幕 | 男女免费视频网站 | 亚洲精品人成网在线播放影院 | 色婷婷中文字幕在线一区天堂 | 一级片在线免费观看 | 日本久久久久久久 | 亚洲视频一区在线播放 | 男女男精品视频在线播放 | 亚洲mm水蜜桃 | 欧美日韩国产亚洲一区二区三区 | 国内自拍偷拍视频 | 雅虎日本免费一区二区三区 | 亚洲人成人77777网站 | 亚洲综合一区二区精品久久 | 欧美日韩亚洲国产 | 日本天堂免费 | 亚洲毛片免费视频 | 亚洲人成综合在线播放 | 婷婷色香五月激情综合2020 | 在线观看国产一区二区三区99 | 久久青草精品一区二区三区 | 婷婷六月久久综合丁香一二 | 亚洲国产欧美国产综合一区 | 欧美一区二区福利视频 | 午夜视频入口 |