青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Onway

我是一只菜菜菜菜鳥...
posts - 61, comments - 56, trackbacks - 0, articles - 34

APUE第十一十二章 線程及其控制 筆記

Posted on 2011-12-16 12:41 Onway 閱讀(499) 評論(0)  編輯 收藏 引用 所屬分類: 使用說明
2011-12-5 第十一章 線程
第一節(jié) 引言
1,一個進程中的所有線程都可以訪問該進程的組成部件,如果文件按描述符和內(nèi)存。
2,無論何時,只要單個資源需要在多個用戶間共享,就必須處理一致性問題。

第二節(jié) 線程概念
1,通過為每種事件類型的處理分配單獨的線程,能夠簡化處理異步事件的代碼。
2,多個線程自動地可以訪問相同的存儲地址空間和文件描述符。
3,有些問題可以通過將其分解從而改善整個程序的吞吐量。
4,交互的程序同樣可以通過使用多線程實現(xiàn)響應(yīng)時間的改善。
5,線程包含了表示進程內(nèi)執(zhí)行環(huán)境必需的信息,其中包括進程中標(biāo)識線程的線程ID,一組寄存器值,棧,調(diào)度優(yōu)先級和策略,信號屏蔽字,error變量以及線程私有數(shù)據(jù)。
6,進程的所有信息對該進程的所有線程都是共享的,包括可執(zhí)行的程序文本,程序的全局內(nèi)存和堆內(nèi)存,棧以及文件描述符。

第三節(jié) 線程標(biāo)識
1,線程ID用pthread_t數(shù)據(jù)類型來表示。
2,兩個線程ID進行比較:
int pthread_equal(pthread_t tid1,pthread_t tid2);
3,獲得自身的線程ID:
pthread_t pthread_self(void);

第四節(jié) 線程創(chuàng)建
1,線程創(chuàng)建時并不能保證哪個線程先運行:是新創(chuàng)建的線程還是調(diào)用線程。
2,新創(chuàng)建的線程可以訪問進程的地址空間,并且繼承調(diào)用線程的浮點環(huán)境和信號屏蔽字,但是該線程的未決信號集被清除。
3,linux使用clone系統(tǒng)調(diào)用來實現(xiàn)pthread_create。clone系統(tǒng)調(diào)用創(chuàng)建子進程,這個子進程可以共享父進程一定數(shù)量的執(zhí)行環(huán)境(如文件描述符和內(nèi)存),這個數(shù)量是可配置。
4,289頁pthread_create函數(shù)的聲明將void *(*start_rtn)(void*)漏了最后一個*號。

第五節(jié) 線程終止
1,如果進程的任一線程調(diào)用了exit,Exit或者_exit,那么整個進程就會終止。與此類似,如果信號的默認(rèn)動作是終止進程,那么,把該信號發(fā)送給線程會終止整個進程。
2,pthread_create和pthread_exit函數(shù)的無類型指針參數(shù)能傳遞的數(shù)值可以不止一個,該指針可以傳遞包含更復(fù)雜信息的結(jié)構(gòu)的地址,但是注意這個結(jié)構(gòu)所使用的內(nèi)存在調(diào)用者完成調(diào)用以后仍然是有效的,否則就會出現(xiàn)無效或非法內(nèi)存訪問。
3,默認(rèn)情況下,pthread_cancel函數(shù)會使得由tid標(biāo)識的線程的行為表現(xiàn)為如同調(diào)用了參數(shù)為PTHREAD_CANCELED的pthread_exit函數(shù),但是,線程可以選擇忽略取消方式或是控制取消方式。
4,線程可以安排它退出時需要調(diào)用的函數(shù)。這樣的函數(shù)稱為線程清理處理程序。線程可以建立多個清理處理程序。處理程序記錄在棧中,也就是說它們的執(zhí)行順序與他們注冊時的順序相反。
5,這些函數(shù)(pthread_cleanup_push,pthread_cleanup_pop)有一個限制,由于它們可以實現(xiàn)為宏,所以必須在與線程相同的作用域中以匹配對的形式使用,pthread_cleanup_push的宏定義可包含字符{,在這種情況下對應(yīng)的匹配字符}就要在pthread_cleanup_pop定義中出現(xiàn)。(不太懂)
6,如果線程是通過從它的啟動例程中返回而終止的話,那么它的清理處理程序就不會被調(diào)用。
7,297頁進程原語和線程原語的比較中,pthread_cleanup_push誤為pthread_cancel_push。

第六節(jié) 線程同步
1,當(dāng)某個線程可以修改變量,而其他線程也可以讀取或者修改這個變量的時候,就需要對這些線程進行同步,以確保它們在訪問變量的存儲內(nèi)容時不會訪問到無效的數(shù)值。
2,對互斥量進行加鎖以后,任何其他試圖再次對互斥量加鎖的線程將會被阻塞直到當(dāng)前線程釋放該互斥鎖。如果釋放互斥鎖的時候有多個線程阻塞,所有在該互斥鎖上的阻塞線程都會編程可運行狀態(tài),第一個變?yōu)檫\行狀態(tài)的線程可以對互斥量加鎖,其他線程將會看到互斥鎖依然被鎖住,只能回去再次等待它重新變?yōu)榭捎谩?/div>
3,如果動態(tài)地分配互斥量,那么在釋放內(nèi)存前需要調(diào)用pthread_mutex_destroy。
4,如果線程試圖對同一個互斥量加鎖兩次或者兩個線程都在互相請求另一個線程擁有的資源,就會產(chǎn)生死鎖。
5,可以通過小心地控制互斥量加鎖的順序來避免死鎖的發(fā)生。只有在一個線程試圖以與另一個線程相反的順序鎖住互斥量時,才可能出現(xiàn)死鎖。
6,如果互斥鎖的順序難以安排的時候,可以采用另一種方法避免死鎖:先釋放占有的鎖,然后過一段時間再嘗試使用pthread_mutex_trylock加鎖。
7,如果鎖的粒度太粗,就會出現(xiàn)很多線程阻塞等待相同的鎖,源自并發(fā)性的改善微乎其微。如果鎖的粒度太細(xì),那么過多的鎖開銷會使系統(tǒng)性能受到影響,而且代碼變得相當(dāng)復(fù)雜。
8,302和304頁的程序中,在struct foo *foo_alloc(void)函數(shù)中fh[idx]=fp->f_next應(yīng)為fh[idx]=fp。而且void foo_find(int id)這個函數(shù)即使id的對象存在,也不一定能找到該對象。這個兩個程序,按個人的理解,都是以散列表的元素作為單鏈表的頭指針。
9,讀寫鎖可以有三種狀態(tài):讀模式下加鎖狀態(tài),寫模式下加鎖狀態(tài),不加鎖狀態(tài)。一次只有一個線程可以占有寫模式的讀寫鎖,但是多個線程可以同時占有讀模式的讀寫鎖。
10,讀寫鎖在讀加鎖狀態(tài)時,如果線程希望以寫模式對此鎖進行加鎖,它必須阻塞直到所有的線程釋放讀鎖。隨后的讀模式請求通常會被阻塞。
11,如果pthread_rwlock_init為讀寫鎖分配了資源,pthread_rwlock_destroy將釋放這些資源。
12,條件變量與互斥變量一起使用的時候,允許線程以無競爭的方式等待特定的條件發(fā)生。
13,調(diào)用者把鎖住的互斥量傳遞給函數(shù)pthread_cond_wait,函數(shù)將調(diào)用線程放到等待條件的線程列表上,然后對互斥量解鎖,這兩個操作是原子操作。這樣就關(guān)閉了條件檢查和線程進入休眠狀態(tài)等待條件改變這兩個操作之間的時間通道(關(guān)鍵)。pthread_cond_wait返回時,互斥量再次被鎖住。
14,從pthread_cond_wait或者pthread_cond_timedwait調(diào)用返回時3,線程需要重新計算條件,因為其他的線程可能已經(jīng)在運行并改變了條件。
15,調(diào)用pthread_cond_signal或者pthread_cond_broadcast,也稱為向線程或條件發(fā)送信號。必須注意一定要在改變條件狀態(tài)以后再給線程發(fā)信號。

第七節(jié) 小結(jié)

2011年12月9日 第十二章 線程控制
第一節(jié) 引言

第二節(jié) 線程限制
1,線程限制宏
PTHREAD_DESTRUCTOR_ITERATIONS 線程退出時候操作系統(tǒng)實現(xiàn)試圖銷毀線程私有數(shù)據(jù)的最大次數(shù)
PTHREAD_KEYS_MAX 進程可以創(chuàng)建的鍵的最大數(shù)目
PTHREAD_STACK_MIN 一個線程的??捎玫淖钚∽止?jié)數(shù)
PTHREAD_THREADS_MAX 進程可以創(chuàng)建的最大線程數(shù)
2,雖然某些操作系統(tǒng)實現(xiàn)可能沒有提供訪問這些限制的方法,但這并不意味著這些限制不存在,它只是表明操作系統(tǒng)實現(xiàn)沒有提供使用sysconf訪問這些值的方法。

第三節(jié) 線程屬性
1,POSIX.1線程屬性
detachstate 線程的分離狀態(tài)屬性
guardsize 線程棧末尾的警戒緩沖區(qū)大小
stackaddr 線程棧的最低地址
stacksize 線程棧的大小(字節(jié)數(shù))
2,處于分離狀態(tài)的線程,退出后操作系統(tǒng)會回收它的資源。(問,這資源還歸進程擁有嗎?應(yīng)該歸吧)
3,pthread_attr_getstack和pthread_attr_setstack的參數(shù)stackaddr是指線程棧的最低地址,至于是開始位置還是結(jié)束位置,還要根據(jù)處理器的地址擴展方向來定。
4,pthread_attr_setstacksize非常適用于希望改變線程棧大小,但又不想自己處理線程棧地址分配的情況。
5,線程屬性guardsize控制著線程棧末尾之后用以避免棧溢出的擴展內(nèi)存大小。
6,只要pthread_attr_destroy調(diào)用失敗,都可能造成嚴(yán)重后果,最壞就是內(nèi)存泄漏。
7,對于遵循POSIX標(biāo)準(zhǔn)的操作系統(tǒng)來說,并不一定要支持線程棧屬性,但是對于遵循XSI擴展的系統(tǒng),支持線程棧屬性就是必須的。
8,并行是指無論從微觀還是宏觀上看,都是多個線程或者進程同時執(zhí)行,而并發(fā)在微觀上不是同時執(zhí)行的,只是把時間分成若干段,使多個進程或線程快速交替地執(zhí)行。并行度越高,說明同時運行的任務(wù)數(shù)越多,如果相應(yīng)的核數(shù)合適,可以提高整體的計算能力,充分發(fā)揮并行程序的效率。當(dāng)然有時候也叫并發(fā)度,但是基本上都是在微觀上表示同時進行的線程/進程的個數(shù)。
http://book.51cto.com/art/201009/224265.htm

第四節(jié) 同步屬性
1,互斥量的兩個屬性是:進程共享屬性和類型屬性。如果進程共享互斥量屬性被設(shè)置為PTHREAD_PROCESS_SHARED,從多個進程共享的內(nèi)存區(qū)域中分配的互斥量就可以用于這些進程的同步。類型互斥量屬性控制著互斥量的特性。
2,讀寫鎖支持的唯一屬性是進程共享屬性,該屬性與互斥量的進程共享屬性相同。
3,條件變量也只支持進程共享屬性。
ps:這一節(jié)看得很暈,已經(jīng)超出了我的理解范圍了(12月10日)。

第五節(jié) 重入
1,如果一個函數(shù)在同一時刻可以被多個線程安全地調(diào)用,就稱該函數(shù)是線程安全的。
2,支持線程安全函數(shù)的操作系統(tǒng)實現(xiàn)會在<unistd.h>中定義符號_POSIX_THREAD_SAFE_FUNCTIONS。
3,操作系統(tǒng)實現(xiàn)支持線程安全函數(shù)這一特性時,對POSIX.1中的一些非線程安全函數(shù),它會提供可替代的線程安全版本。
4,如果一個函數(shù)對多個線程來說是可重入的,則說這個函數(shù)是線程安全的,但這并不能說明對信號處理程序來說該函數(shù)也是可重入的。如果函數(shù)對異步信號處理程序的重入也是安全的,那么就可以說函數(shù)是異步信號安全的。
5,可以使用fflockfile和ftrylockfile獲取與給定FILE對象關(guān)聯(lián)的鎖。這個鎖是遞歸的。雖然這種鎖的具體實現(xiàn)并無規(guī)定,但要求所有操作FILE對象的標(biāo)準(zhǔn)I/O例程表現(xiàn)得就像它們內(nèi)部調(diào)用了flockfile和funlockfile一樣。
6,如果標(biāo)準(zhǔn)I/O例程都獲取它們各自的鎖,那么在一次一個字符的I/O操作時性能就會出現(xiàn)嚴(yán)重的下降。為了避免這種開銷,出現(xiàn)了不加鎖版本的基于字符的標(biāo)準(zhǔn)I/O例程。
7,pthread函數(shù)并不能保證是異步信號安全的,所以不能把pthread函數(shù)用于其他函數(shù),讓該函數(shù)成為異步信號安全的。

第六節(jié) 線程私有數(shù)據(jù)
1,設(shè)置線程私有數(shù)據(jù)的步驟:
a,pthread_once保證pthread_key_create只被調(diào)用一次。
b,pthread_key_create產(chǎn)生一個鍵。
c,pthread_setspecific將動態(tài)分配的數(shù)據(jù)地址與鍵關(guān)聯(lián)起來。

第七節(jié) 取消選項
1,線程的可取消狀態(tài)和可取消類型這兩個屬性影響著線程在響應(yīng)pthread_cancel函數(shù)調(diào)用時鎖呈現(xiàn)的行為。
2,可取消類型分為異步取消和延遲取消,使用異步取消時,線程可以在任意時刻取消,而不是非得遇到取消點才能被取消。
3,當(dāng)線程處于延遲取消類型的情況下,可以調(diào)用pthread_setcancelstate修改它的可取消狀態(tài)。
4,取消點是線程檢查是否被取消并按照取消請求進行動作的一個位置。
5,當(dāng)可取消狀態(tài)設(shè)置為PTHREAD_CANCEL_DISABLE時,對pthread_cancel的調(diào)用不會殺死進程,相反,取消請求對這個線程來說處于未決狀態(tài)。
6,可以調(diào)用pthread_testcancel函數(shù)在程序中自己添加取消點。

第八節(jié) 線程和信號
1,每個線程都有自己的信號屏蔽字,但是信號的處理是進程中所有線程共享的。
2,進程中的信號是傳遞到單個線程的。
3,線程信號阻塞函數(shù):pthread_sigmask。
4,線程信號等待函數(shù):sigwait。
5,發(fā)送信號到線程:pthread_kill。
6,鬧鐘定時器是進程資源,并且所有的線程共享相同的alarm。
7,新建線程繼承了現(xiàn)有的信號屏蔽字。因為sigwait會解除信號的阻塞狀態(tài),所以只有一個線程可以用于信號的接收。這使得對主線程進行編碼時不必?fù)?dān)心來自這些信號的中斷。

第九節(jié) 線程和fork
1,如果父進程包含多個線程,子進程在fork返回以后,如果緊接著不是馬上調(diào)用exec的話,就需要清理鎖狀態(tài)。
2,要清除鎖狀態(tài),可以調(diào)用pthread_atfork函數(shù)建立fork處理程序。

第十節(jié) 線程和I/O
1,可以使用pwrite和pread來解決并發(fā)線程對同一文件進行寫操作的問題。

第十一節(jié) 小結(jié)


ps:只是每天晚上看一點,感覺還是比較急了,而且這些東西目前還用不上,代碼也沒寫過。就算看個概念吧。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产视频日韩| 欧美一区二区三区播放老司机 | 久热综合在线亚洲精品| 一本久久综合亚洲鲁鲁五月天| 欧美日本一区| 欧美高清视频一区二区| 久久亚洲电影| 午夜一区二区三区在线观看| 亚洲一区bb| 蜜桃av久久久亚洲精品| 久久久久免费视频| 久久男女视频| 欧美成人黑人xx视频免费观看| 久久久无码精品亚洲日韩按摩| 久久久久se| 久久网站热最新地址| 狂野欧美性猛交xxxx巴西| 久久久天天操| 欧美福利精品| 亚洲乱码国产乱码精品精可以看| 欧美激情1区2区3区| 欧美日韩精品免费在线观看视频| 美国十次成人| 国产精品久久福利| 亚洲国产成人久久综合一区| 亚洲视频www| 欧美成人精品三级在线观看| 一区二区三区四区五区精品视频 | 亚洲在线国产日韩欧美| 午夜影视日本亚洲欧洲精品| 久久精品亚洲一区二区三区浴池| 亚洲黄网站在线观看| 一区二区三区国产在线| 久久免费视频网站| 国产精品日韩精品| 亚洲理论在线观看| 久久久蜜桃精品| 亚洲深夜福利网站| 欧美精品18+| 在线观看亚洲视频| 久久av资源网站| 99在线精品观看| 欧美电影免费观看高清| 国模一区二区三区| 欧美一二三视频| 一本色道**综合亚洲精品蜜桃冫| 美女黄毛**国产精品啪啪 | 国产精品av一区二区| 亚洲国产精品ⅴa在线观看| 欧美一区二区三区久久精品| 日韩视频欧美视频| 欧美人妖另类| 99精品视频免费观看| 欧美成人一品| 欧美1区3d| 亚洲人精品午夜| 亚洲国产91| 欧美大片网址| aa级大片欧美| 亚洲乱码国产乱码精品精可以看| 欧美激情视频一区二区三区不卡| 亚洲黄色成人| 亚洲欧洲精品一区二区三区不卡| 欧美成人免费在线| 日韩视频免费观看高清完整版| 欧美激情一区二区久久久| 蜜乳av另类精品一区二区| 最新中文字幕亚洲| 亚洲人成毛片在线播放| 欧美日韩久久久久久| 亚洲欧美另类在线| 午夜日韩激情| 在线观看日韩专区| 亚洲国产毛片完整版 | 欧美理论片在线观看| 一二三区精品福利视频| 亚洲视频每日更新| 国产一区二区三区在线播放免费观看 | 国产精品色婷婷久久58| 欧美专区日韩视频| 久久精品国产一区二区电影| 亚洲国产中文字幕在线观看| 亚洲精品视频在线| 亚洲一区二区三区国产| 国产女主播一区| 免费不卡视频| 欧美日韩精品二区| 亚欧美中日韩视频| 乱中年女人伦av一区二区| av不卡在线观看| 欧美在线日韩精品| 一本久久a久久免费精品不卡 | 欧美 日韩 国产一区二区在线视频| 日韩一区二区精品葵司在线| 亚洲图片自拍偷拍| 亚洲国产欧美一区二区三区同亚洲| 亚洲黄色毛片| 国产一区二区福利| 亚洲精品一二三区| 国产综合18久久久久久| 亚洲六月丁香色婷婷综合久久| 国产日本精品| 亚洲精一区二区三区| 国产在线精品二区| 99精品久久| 亚洲高清123| 亚洲一区国产| 亚洲另类一区二区| 久久久久久久久久久久久女国产乱 | 国产精品一区二区在线观看| 可以看av的网站久久看| 欧美性做爰毛片| 欧美黄色一区| 国产在线拍偷自揄拍精品| 日韩一级视频免费观看在线| 在线观看欧美亚洲| 午夜欧美理论片| 亚洲欧美韩国| 欧美三级在线播放| 亚洲欧洲午夜| 亚洲高清视频中文字幕| 欧美一区二区三区免费视| 亚洲综合日韩在线| 国产精品高潮呻吟久久| 亚洲精品系列| 一区二区av| 欧美日韩精品国产| 亚洲精品中文在线| 日韩视频永久免费| 欧美激情欧美激情在线五月| 欧美成人免费在线视频| 国产一区清纯| 久久aⅴ国产欧美74aaa| 久久九九久久九九| 国产一区二区三区久久悠悠色av| 亚洲欧美日本伦理| 久久久99精品免费观看不卡| 国产亚洲在线| 久久久亚洲人| 亚洲福利免费| 一区二区激情小说| 欧美日韩视频在线观看一区二区三区| 亚洲综合欧美日韩| 欧美日韩亚洲天堂| 亚洲色图自拍| 久久av资源网| 在线精品观看| 欧美国产日韩在线观看| 亚洲精品在线视频观看| 亚洲视频免费在线| 国产精品黄色| 香蕉久久一区二区不卡无毒影院 | 欧美激情日韩| 一区二区三区四区五区视频 | 国产在线乱码一区二区三区| 久久久久久综合| 亚洲国产精品视频一区| 一区二区三区蜜桃网| 国产精品电影网站| 性欧美暴力猛交69hd| 欧美黑人一区二区三区| 日韩亚洲不卡在线| 国产精品美女黄网| 久久天天躁夜夜躁狠狠躁2022| 欧美激情一二区| 午夜精品视频网站| 亚洲高清视频一区二区| 欧美三级电影精品| 久久精品视频在线免费观看| 欧美成人xxx| 亚洲一区二区伦理| 狠狠色狠狠色综合| 欧美日韩成人免费| 午夜在线精品| 亚洲精品免费在线| 久久久777| 一区二区三区视频观看| 国产伦精品一区二区三区| 美女日韩欧美| 香蕉久久国产| 一本色道久久精品| 欧美福利视频在线观看| 欧美在线综合| 亚洲午夜极品| 亚洲国产欧美一区二区三区同亚洲| 国产精品成人一区| 欧美va天堂| 久久精品一区二区三区不卡| 在线综合亚洲| 亚洲精品久久久一区二区三区| 久久久久久91香蕉国产| 亚洲免费在线观看视频| 久久成人一区二区| 在线中文字幕一区| 亚洲精品在线免费观看视频| 欧美成人高清| 免费在线成人av| 久热精品在线| 欧美在线免费观看亚洲| 中文av一区特黄|