商品簡介
作者簡介
序
目次
相關商品
商品簡介
本書是基於新UNIX標準的完備參考書,對UNIX編程要點進行清晰易懂的介紹,從說明系統調用的短小代碼段開始,逐漸過渡到用於技能提升的實際項目。作者深入探討通信、併發和線程問題,對複雜概念(如信號和併發)進行全面解讀,覆蓋文件、信號、信號量、POSIX線程和客戶機-服務器通信等內容;提供大量實例、練習,以及針對性項目及其參考答案。全書第一部分介紹UNIX基礎知識,包括文件、進程和特殊文件等;第二部分介紹信號和定時器;第三部分介紹信號量和進程同步;第四部分介紹通信話題。本書適合作為高等院校計算機專業的教材,也可供軟件開發人員參考使用。
作者簡介
Kay Robbins 和 Steve Robbins,是美國麻省理工學院博士,現任德州大學聖安東尼奧分校計算機科學系講師。《UNIX系統編程: 通信、併發與線程》(UNIX Systems Programming: Communication, Concurrency and Threads)是他們的代表作。
譯者師蓉,譯有《完美Java(第6版)》、《信息架構:大型網站Web設計(第4版)》《像富人一樣思考》《故事場景摩天樓》《互聯網領導思維》《斷點:互聯網進化啟示錄》《Unity 3.x遊戲開發實例》《iPhone應用用戶體驗設計實戰與案例》《社交網站界面設計》等書。
譯者師蓉,譯有《完美Java(第6版)》、《信息架構:大型網站Web設計(第4版)》《像富人一樣思考》《故事場景摩天樓》《互聯網領導思維》《斷點:互聯網進化啟示錄》《Unity 3.x遊戲開發實例》《iPhone應用用戶體驗設計實戰與案例》《社交網站界面設計》等書。
序
前?言
本書是1995年由Prentice Hall出版的Practical UNIX Programming: A Guide to Communication, Concurrency and Multithreading一書的第2版。為了更好地傳達本書的內容,我們將書名修改為“UNIX系統編程:通信、併發與線程”。與上一版相比,我們不僅改變了書名,還對很多內容進行了修改。
互聯網已經成為計算和社會領域的一個主導方面。我們的私人信息聯網了;我們的軟件經常會受到攻擊。因此,編寫正確的代碼顯得尤為重要。在這一版中,我們嘗試儘量生成能夠正確處理錯誤和特殊情況的代碼。我們意識到,只是聲稱處理了所有的錯誤,但在給出的代碼中卻省略錯誤處理是沒有效果的。不幸的是,錯誤處理讓代碼變得更複雜。我們付出了很多努力,以便讓代碼顯得清晰一些。
本書對上一版的另一個重要改進是採用了單一的UNIX規範,我們將其稱為POSIX。我們再也不需要決定使用哪個廠商的庫函數了――現在有了正式的版本。我們已經盡了最大努力來遵循這個標準。
練習和項目讓本書變得與眾不同。實際上,本書是從作為美國國家科學基金會(National Science Foundation Grant)一部分的項目手冊發展而來的。在完成這個項目的初期開發後,我們逐漸認識到:完成這個項目所需的材料分散在不同的地方――這些材料通常可以在提供了大量細節、但幾乎沒有概念陳述的參考書中找到。因此,本書逐漸成為一本基於最新UNIX標準的完整參考書。
本書分為4部分,每部分都包含主題章節和項目章節。主題章節以循序漸進的方式涵蓋了指定的內容,並以“ 試試看”和“看看會發生什麼”的形式包含了很多示例和練習。主題章節都以一個或者多個練習小節結束。本書還為進程管理、併發和通信的很多基本概念提供了很多編程練習。這些編程練習與傳統科學課程中的實驗作用相同。只有通過實踐才能真正理解書中的概念。這些練習由易到難,很多練習只需要不到100行代碼就能實現。
項目章節通過開發一個規模較大的應用程序來整合幾個主題章節的資料。這些項目包含兩個層面。除說明編程思想外,這些項目還引導讀者理解與應用程序相關的高級主題。這些項目都是分階段設計的,大多數完整的實現都只需要幾百行代碼。由於不需要編寫大量代碼,因此,讀者可以將注意力集中在對概念的理解而不是代碼調試上。為了簡化編程,我們提供了可用於網絡通信和輸出日誌記錄的庫。對專業的程序員來說,主題章節結尾部分的練習提供了對概念的基本介紹。通常,使用本書的教師可以從中挑選幾個練習和一個項目章節讓學生在一學期的課程中實現。每個項目都有多種變化,因此,這些項目可以在多個學期裡反復使用。
讀者可以用不同的方式閱讀本書。第一部分的主題章節是閱讀本書其他部分的基礎。在閱讀完第一部分的主題章節後,讀者可以按照任何順序閱讀第二部分至第四部分的內容,但後續章節結尾部分關於交互的討論(例如,線程如何與信號交互)除外。
我們假定讀者是優秀的C程序員,但不一定是UNIX C的程序員。讀者應該熟悉C語言編程和基本的數據結構。對於剛剛接觸UNIX的讀者來說,附錄A中給出了程序開發的必備知識。
本書包含標準函數的概要。我們在概要的右下角列出了指定函數的相關標準。
本書的內容是有限的。我們歡迎讀者提出意見和建議,電子郵件地址為authors@usp.cs.utsa.edu。雖然我們已經盡最大努力保證本書沒有錯誤,但如果你是第一個向我們指出某個錯誤的人,那麼我們會在本書的配套網站上對你表示誠摯的感謝。我們在Web站點http://usp.cs.utsa.edu/usp上提供了本書的相關信息。從這個Web站點上可以下載本書中包含的所有代碼。
本書是1995年由Prentice Hall出版的Practical UNIX Programming: A Guide to Communication, Concurrency and Multithreading一書的第2版。為了更好地傳達本書的內容,我們將書名修改為“UNIX系統編程:通信、併發與線程”。與上一版相比,我們不僅改變了書名,還對很多內容進行了修改。
互聯網已經成為計算和社會領域的一個主導方面。我們的私人信息聯網了;我們的軟件經常會受到攻擊。因此,編寫正確的代碼顯得尤為重要。在這一版中,我們嘗試儘量生成能夠正確處理錯誤和特殊情況的代碼。我們意識到,只是聲稱處理了所有的錯誤,但在給出的代碼中卻省略錯誤處理是沒有效果的。不幸的是,錯誤處理讓代碼變得更複雜。我們付出了很多努力,以便讓代碼顯得清晰一些。
本書對上一版的另一個重要改進是採用了單一的UNIX規範,我們將其稱為POSIX。我們再也不需要決定使用哪個廠商的庫函數了――現在有了正式的版本。我們已經盡了最大努力來遵循這個標準。
練習和項目讓本書變得與眾不同。實際上,本書是從作為美國國家科學基金會(National Science Foundation Grant)一部分的項目手冊發展而來的。在完成這個項目的初期開發後,我們逐漸認識到:完成這個項目所需的材料分散在不同的地方――這些材料通常可以在提供了大量細節、但幾乎沒有概念陳述的參考書中找到。因此,本書逐漸成為一本基於最新UNIX標準的完整參考書。
本書分為4部分,每部分都包含主題章節和項目章節。主題章節以循序漸進的方式涵蓋了指定的內容,並以“ 試試看”和“看看會發生什麼”的形式包含了很多示例和練習。主題章節都以一個或者多個練習小節結束。本書還為進程管理、併發和通信的很多基本概念提供了很多編程練習。這些編程練習與傳統科學課程中的實驗作用相同。只有通過實踐才能真正理解書中的概念。這些練習由易到難,很多練習只需要不到100行代碼就能實現。
項目章節通過開發一個規模較大的應用程序來整合幾個主題章節的資料。這些項目包含兩個層面。除說明編程思想外,這些項目還引導讀者理解與應用程序相關的高級主題。這些項目都是分階段設計的,大多數完整的實現都只需要幾百行代碼。由於不需要編寫大量代碼,因此,讀者可以將注意力集中在對概念的理解而不是代碼調試上。為了簡化編程,我們提供了可用於網絡通信和輸出日誌記錄的庫。對專業的程序員來說,主題章節結尾部分的練習提供了對概念的基本介紹。通常,使用本書的教師可以從中挑選幾個練習和一個項目章節讓學生在一學期的課程中實現。每個項目都有多種變化,因此,這些項目可以在多個學期裡反復使用。
讀者可以用不同的方式閱讀本書。第一部分的主題章節是閱讀本書其他部分的基礎。在閱讀完第一部分的主題章節後,讀者可以按照任何順序閱讀第二部分至第四部分的內容,但後續章節結尾部分關於交互的討論(例如,線程如何與信號交互)除外。
我們假定讀者是優秀的C程序員,但不一定是UNIX C的程序員。讀者應該熟悉C語言編程和基本的數據結構。對於剛剛接觸UNIX的讀者來說,附錄A中給出了程序開發的必備知識。
本書包含標準函數的概要。我們在概要的右下角列出了指定函數的相關標準。
本書的內容是有限的。我們歡迎讀者提出意見和建議,電子郵件地址為authors@usp.cs.utsa.edu。雖然我們已經盡最大努力保證本書沒有錯誤,但如果你是第一個向我們指出某個錯誤的人,那麼我們會在本書的配套網站上對你表示誠摯的感謝。我們在Web站點http://usp.cs.utsa.edu/usp上提供了本書的相關信息。從這個Web站點上可以下載本書中包含的所有代碼。
目次
第一部分 基礎知識
第1章 技術對程序的影響 3
1.1?術語的變化 3
1.2?時間和速度 5
1.3?多道程序設計和分時 6
1.4?應用層的併發 8
1.4.1?中斷 8
1.4.2?信號 9
1.4.3?輸入和輸出 10
1.4.4?進程、線程和資源共享 10
1.4.5?具有共享內存的多個處理器 11
1.4.6?網絡作為計算機 11
1.5?安全和容錯 12
1.6?非法入侵造成的緩沖區溢出 13
1.6.1?緩沖區溢出的後果 14
1.6.2?緩沖區溢出和安全 16
1.7?UNIX標準 17
1.8?延伸閱讀 19
第2章 程序、線程和進程 21
2.1?程序是如何成為進程的 21
2.2?線程和執行線程 22
2.3?程序映象的佈局 23
2.4?庫函數調用 26
2.5?函數返回值和錯誤 29
2.6?參數數組 31
2.6.1?用makeargv函數創建一個數組 32
2.6.2?makeargv函數的實現 34
2.7?線程安全函數 38
2.8?靜態變量的使用 40
2.9?靜態對象的結構 42
2.10?進程環境 48
2.11?進程終止 51
2.12?練習:一個env實用程序 54
2.13?練習:消息日誌 55
2.14?延伸閱讀 57
第3章 UNIX中的進程 58
3.1?進程標識符 58
3.2?進程狀態 60
3.3?UNIX 進程創建和fork函數 63
3.4?wait函數 70
狀態值 76
3.5?exec函數 77
3.6?後臺進程和守護進程 83
3.7?臨界區 86
3.8?練習:進程鏈 87
3.9?練習:進程扇 88
3.10?延伸閱讀 89
第4章 UNIX I/O 90
4.1?設備術語 90
4.2?讀/寫 91
4.3?打開和關閉文件 102
4.4?select函數 107
4.5?poll函數 116
4.6?文件表示 119
4.6.1?文件描述符 119
4.6.2?文件指針和緩衝 122
4.6.3?文件描述符的繼承 124
4.7?過濾器和重定向 128
4.8?文件控制 132
4.9?練習:原子日誌 135
原子日誌庫 139
4.10?練習:cat實用程序 141
4.11?延伸閱讀 143
第5章 文件和目錄 144
5.1?UNIX文件系統導航 144
5.1.1?當前工作目錄 145
5.1.2?搜索路徑 150
5.2?目錄訪問 151
5.2.1?訪問文件狀態信息 153
5.2.2?確定文件的類型 156
5.3?UNIX文件系統實現 157
5.3.1?UNIX文件實現 158
5.3.2?目錄實現 161
5.4?硬鏈接和符號鏈接 161
5.4.1?創建或刪除一個鏈接 162
5.4.2?創建和刪除符號鏈接 167
5.5?練習:which命令 172
5.6?練習:郵件通知程序 173
5.7?練習:新聞通知程序 176
5.8?練習:遍歷目錄 177
5.9?延伸閱讀 179
第6章 UNIX特殊文件 180
6.1?管道 180
6.2?流水線 184
6.3?FIFO 189
6.4?管道與客戶機-服務器模型 193
6.5?終端控制 200
規範和非規範的輸入處理 208
6.6?音頻設備 212
6.7?練習:音頻 218
6.8?練習:屏障 220
6.9?練習:stty命令 221
6.10?練習:重提客戶機-服務器 222
6.11?延伸閱讀 222
第7章 項目:令牌環 224
7.1?環形拓撲 224
7.2?環的形成 226
7.3?環的探討 232
7.4?簡單通信 234
7.5?用令牌環實現互斥 235
7.6?用投票實現互斥 237
7.7?匿名環中的領導者選舉 238
7.8?用於通信的令牌環 240
7.9?流水線預處理機 242
7.10?並行環算法 244
7.10.1?圖像過濾 244
7.10.2?矩陣乘法 247
7.11?彈性環 248
7.12?延伸閱讀 249
第二部分?異步事件
第8章 信號 253
8.1?信號的基本概念 253
8.2?信號的產生 254
8.3?對信號掩碼和信號集進行操作 259
8.4?捕獲和忽略信號―sigaction 266
8.5?等待信號―pause、sigsuspend和sigwait 272
8.5.1?pause函數 272
8.5.2?sigsuspend函數 274
8.5.3?sigwait函數 282
8.6?處理信號:錯誤和異步信號安全 283
8.7?用siglongjmp和sigsetjmp進行程序控制 286
8.8?使用異步I/O編程 288
8.9?練習:轉儲統計 300
8.10?練習:同時處理慢速設備 301
8.11?延伸閱讀 301
第9章 時間和定時器 303
9.1?POSIX時間 303
9.1.1?用從Epoch開始的秒數表示時間 304
9.1.2?顯示日期和時間 305
9.1.3?使用struct timeval表示時間 308
9.1.4?使用實時時鐘 311
9.1.5?耗時和處理器時間的對比 313
9.2?睡眠函數 316
9.3?POSIX:XSI間隔定時器 319
9.4?實時信號 323
9.5?POSIX:TMR間隔定時器 328
9.6?定時器漂移、溢出和絕對時間 333
9.7?延伸閱讀 344
第10章 項目:虛擬定時器 345
10.1?項目概述 345
10.2?簡單的定時器 348
10.3?對5個定時器中的一個進行設置 351
10.3.1?virtualtimers對象 351
10.3.2?hardwaretimer對象 353
10.3.3?主程序實現 354
10.3.4?用show譜寫定時器代碼 355
10.4?使用多個定時器 361
10.4.1?設置多個定時器 364
10.4.2?用多個定時器進行測試 365
10.5?多定時器的健壯實現 369
10.6?POSIX:TMR定時器的實現 371
10.7?一個小型的cron工具mycron 372
10.8?延伸閱讀 372
第11章 項目:破解shell 373
11.1?構建一個簡單的shell 373
11.2?重定向 378
11.3?流水線 382
11.4?前臺的信號處理 385
11.5?進程組、會話和控制終端 391
11.5.1?進程組 391
11.5.2?會話 393
11.6?ush中的後臺進程 396
11.7?作業控制 403
11.8?ush的作業控制 407
11.8.1?一個作業列表對象 407
11.8.2?ush中的作業列表 409
11.8.3?ush中的作業控制 409
11.8.4?等待流水線時的進程行為 410
11.9?延伸閱讀 411
第三部分?並?發
第12章 POSIX線程 415
12.1?監視文件描述符的方法 415
12.2?使用線程監視多個文件描述符 417
12.3?線程管理 420
12.3.1?用ID引用線程 421
12.3.2?創建一個線程 422
12.3.3?分離和連接 423
12.3.4?退出和取消 426
12.3.5?向線程傳遞參數並返回值 429
12.4?線程安全 438
12.5?用戶級線程 VS 內核級線程 439
12.6?線程屬性 442
12.6.1?線程狀態 443
12.6.2?線程棧 444
12.6.3?線程調度 446
12.7?練習:並行文件複製 450
12.8?延伸閱讀 451
第13章?線程同步 452
13.1?POSIX同步函數 452
13.2?互斥鎖 453
13.2.1?創建並初始化一個互斥量 454
13.2.2?銷毀一個互斥量 455
13.2.3?鎖定和解鎖互斥量 456
13.2.4?保護不安全的庫函數 458
13.2.5?同步標誌和全域值 459
13.2.6?讓數據結構成為線程安全的 465
13.3?最多一次和至少一次的執行 467
13.4?條件變量 471
13.4.1?條件變量的創建和銷毀 473
13.4.2?等待並通知條件變量 475
13.5?信號處理和線程 478
13.5.1?將信號定向到一個特定的線程中 479
13.5.2?為線程屏蔽信號 480
13.5.3?信號處理的專用線程 480
13.6?讀者和寫者 484
13.7?strerror_r實現 489
13.8?死鎖和其他討厭的問題 491
13.9?練習:多個屏障 492
13.10?延伸閱讀 492
第14章?臨界區和信號量 493
14.1?臨界區的處理 493
14.2?信號量 496
14.3?POSIX:SEM匿名信號量 499
14.4?POSIX:SEM信號量操作 501
14.5?POSIX:SEM命名信號量 508
14.5.1?創建並打開命名信號量 509
14.5.2?關閉信號量並刪除其鏈接 512
14.6?練習:許可管理器 514
14.6.1?license對象 515
14.6.2?runsim主程序 515
14.6.3?對許可管理器的擴展 516
14.7?延伸閱讀 516
第15章?POSIX IPC 517
15.1?POSIX:XSI進程間通信 517
15.1.1?標識並訪問IPC對象 518
15.1.2?在shell中訪問POSIX:XSI IPC資源 519
15.2?POSIX:XSI信號量集 520
15.2.1?信號量的創建 521
15.2.2?信號量的控制 523
15.2.3?POSIX信號量集操作 525
15.3?POSIX:XSI共享內存 532
15.3.1?訪問共享內存段 532
15.3.2?共享內存段的連接和分
第1章 技術對程序的影響 3
1.1?術語的變化 3
1.2?時間和速度 5
1.3?多道程序設計和分時 6
1.4?應用層的併發 8
1.4.1?中斷 8
1.4.2?信號 9
1.4.3?輸入和輸出 10
1.4.4?進程、線程和資源共享 10
1.4.5?具有共享內存的多個處理器 11
1.4.6?網絡作為計算機 11
1.5?安全和容錯 12
1.6?非法入侵造成的緩沖區溢出 13
1.6.1?緩沖區溢出的後果 14
1.6.2?緩沖區溢出和安全 16
1.7?UNIX標準 17
1.8?延伸閱讀 19
第2章 程序、線程和進程 21
2.1?程序是如何成為進程的 21
2.2?線程和執行線程 22
2.3?程序映象的佈局 23
2.4?庫函數調用 26
2.5?函數返回值和錯誤 29
2.6?參數數組 31
2.6.1?用makeargv函數創建一個數組 32
2.6.2?makeargv函數的實現 34
2.7?線程安全函數 38
2.8?靜態變量的使用 40
2.9?靜態對象的結構 42
2.10?進程環境 48
2.11?進程終止 51
2.12?練習:一個env實用程序 54
2.13?練習:消息日誌 55
2.14?延伸閱讀 57
第3章 UNIX中的進程 58
3.1?進程標識符 58
3.2?進程狀態 60
3.3?UNIX 進程創建和fork函數 63
3.4?wait函數 70
狀態值 76
3.5?exec函數 77
3.6?後臺進程和守護進程 83
3.7?臨界區 86
3.8?練習:進程鏈 87
3.9?練習:進程扇 88
3.10?延伸閱讀 89
第4章 UNIX I/O 90
4.1?設備術語 90
4.2?讀/寫 91
4.3?打開和關閉文件 102
4.4?select函數 107
4.5?poll函數 116
4.6?文件表示 119
4.6.1?文件描述符 119
4.6.2?文件指針和緩衝 122
4.6.3?文件描述符的繼承 124
4.7?過濾器和重定向 128
4.8?文件控制 132
4.9?練習:原子日誌 135
原子日誌庫 139
4.10?練習:cat實用程序 141
4.11?延伸閱讀 143
第5章 文件和目錄 144
5.1?UNIX文件系統導航 144
5.1.1?當前工作目錄 145
5.1.2?搜索路徑 150
5.2?目錄訪問 151
5.2.1?訪問文件狀態信息 153
5.2.2?確定文件的類型 156
5.3?UNIX文件系統實現 157
5.3.1?UNIX文件實現 158
5.3.2?目錄實現 161
5.4?硬鏈接和符號鏈接 161
5.4.1?創建或刪除一個鏈接 162
5.4.2?創建和刪除符號鏈接 167
5.5?練習:which命令 172
5.6?練習:郵件通知程序 173
5.7?練習:新聞通知程序 176
5.8?練習:遍歷目錄 177
5.9?延伸閱讀 179
第6章 UNIX特殊文件 180
6.1?管道 180
6.2?流水線 184
6.3?FIFO 189
6.4?管道與客戶機-服務器模型 193
6.5?終端控制 200
規範和非規範的輸入處理 208
6.6?音頻設備 212
6.7?練習:音頻 218
6.8?練習:屏障 220
6.9?練習:stty命令 221
6.10?練習:重提客戶機-服務器 222
6.11?延伸閱讀 222
第7章 項目:令牌環 224
7.1?環形拓撲 224
7.2?環的形成 226
7.3?環的探討 232
7.4?簡單通信 234
7.5?用令牌環實現互斥 235
7.6?用投票實現互斥 237
7.7?匿名環中的領導者選舉 238
7.8?用於通信的令牌環 240
7.9?流水線預處理機 242
7.10?並行環算法 244
7.10.1?圖像過濾 244
7.10.2?矩陣乘法 247
7.11?彈性環 248
7.12?延伸閱讀 249
第二部分?異步事件
第8章 信號 253
8.1?信號的基本概念 253
8.2?信號的產生 254
8.3?對信號掩碼和信號集進行操作 259
8.4?捕獲和忽略信號―sigaction 266
8.5?等待信號―pause、sigsuspend和sigwait 272
8.5.1?pause函數 272
8.5.2?sigsuspend函數 274
8.5.3?sigwait函數 282
8.6?處理信號:錯誤和異步信號安全 283
8.7?用siglongjmp和sigsetjmp進行程序控制 286
8.8?使用異步I/O編程 288
8.9?練習:轉儲統計 300
8.10?練習:同時處理慢速設備 301
8.11?延伸閱讀 301
第9章 時間和定時器 303
9.1?POSIX時間 303
9.1.1?用從Epoch開始的秒數表示時間 304
9.1.2?顯示日期和時間 305
9.1.3?使用struct timeval表示時間 308
9.1.4?使用實時時鐘 311
9.1.5?耗時和處理器時間的對比 313
9.2?睡眠函數 316
9.3?POSIX:XSI間隔定時器 319
9.4?實時信號 323
9.5?POSIX:TMR間隔定時器 328
9.6?定時器漂移、溢出和絕對時間 333
9.7?延伸閱讀 344
第10章 項目:虛擬定時器 345
10.1?項目概述 345
10.2?簡單的定時器 348
10.3?對5個定時器中的一個進行設置 351
10.3.1?virtualtimers對象 351
10.3.2?hardwaretimer對象 353
10.3.3?主程序實現 354
10.3.4?用show譜寫定時器代碼 355
10.4?使用多個定時器 361
10.4.1?設置多個定時器 364
10.4.2?用多個定時器進行測試 365
10.5?多定時器的健壯實現 369
10.6?POSIX:TMR定時器的實現 371
10.7?一個小型的cron工具mycron 372
10.8?延伸閱讀 372
第11章 項目:破解shell 373
11.1?構建一個簡單的shell 373
11.2?重定向 378
11.3?流水線 382
11.4?前臺的信號處理 385
11.5?進程組、會話和控制終端 391
11.5.1?進程組 391
11.5.2?會話 393
11.6?ush中的後臺進程 396
11.7?作業控制 403
11.8?ush的作業控制 407
11.8.1?一個作業列表對象 407
11.8.2?ush中的作業列表 409
11.8.3?ush中的作業控制 409
11.8.4?等待流水線時的進程行為 410
11.9?延伸閱讀 411
第三部分?並?發
第12章 POSIX線程 415
12.1?監視文件描述符的方法 415
12.2?使用線程監視多個文件描述符 417
12.3?線程管理 420
12.3.1?用ID引用線程 421
12.3.2?創建一個線程 422
12.3.3?分離和連接 423
12.3.4?退出和取消 426
12.3.5?向線程傳遞參數並返回值 429
12.4?線程安全 438
12.5?用戶級線程 VS 內核級線程 439
12.6?線程屬性 442
12.6.1?線程狀態 443
12.6.2?線程棧 444
12.6.3?線程調度 446
12.7?練習:並行文件複製 450
12.8?延伸閱讀 451
第13章?線程同步 452
13.1?POSIX同步函數 452
13.2?互斥鎖 453
13.2.1?創建並初始化一個互斥量 454
13.2.2?銷毀一個互斥量 455
13.2.3?鎖定和解鎖互斥量 456
13.2.4?保護不安全的庫函數 458
13.2.5?同步標誌和全域值 459
13.2.6?讓數據結構成為線程安全的 465
13.3?最多一次和至少一次的執行 467
13.4?條件變量 471
13.4.1?條件變量的創建和銷毀 473
13.4.2?等待並通知條件變量 475
13.5?信號處理和線程 478
13.5.1?將信號定向到一個特定的線程中 479
13.5.2?為線程屏蔽信號 480
13.5.3?信號處理的專用線程 480
13.6?讀者和寫者 484
13.7?strerror_r實現 489
13.8?死鎖和其他討厭的問題 491
13.9?練習:多個屏障 492
13.10?延伸閱讀 492
第14章?臨界區和信號量 493
14.1?臨界區的處理 493
14.2?信號量 496
14.3?POSIX:SEM匿名信號量 499
14.4?POSIX:SEM信號量操作 501
14.5?POSIX:SEM命名信號量 508
14.5.1?創建並打開命名信號量 509
14.5.2?關閉信號量並刪除其鏈接 512
14.6?練習:許可管理器 514
14.6.1?license對象 515
14.6.2?runsim主程序 515
14.6.3?對許可管理器的擴展 516
14.7?延伸閱讀 516
第15章?POSIX IPC 517
15.1?POSIX:XSI進程間通信 517
15.1.1?標識並訪問IPC對象 518
15.1.2?在shell中訪問POSIX:XSI IPC資源 519
15.2?POSIX:XSI信號量集 520
15.2.1?信號量的創建 521
15.2.2?信號量的控制 523
15.2.3?POSIX信號量集操作 525
15.3?POSIX:XSI共享內存 532
15.3.1?訪問共享內存段 532
15.3.2?共享內存段的連接和分
主題書展
更多
主題書展
更多書展今日66折
您曾經瀏覽過的商品
購物須知
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。