原创 (P41)一個簡單的線程池實現

文章目錄1.線程池說明2.線程池實現 1.線程池說明 線程池擁有若干個線程 用於執行大量相對短暫的任務 由於線程個數小於任務的數量,因而任務需要進入隊列中進行等待,在短時間可以得到一個線程對任務進行處理 線程的個數與任務的類型有

原创 (P40)posix條件變量

文章目錄1.條件變量2.條件變量函數3.條件變量使用規範4.使用條件變量解決生產者消費者問題 1.條件變量 爲什麼需要條件變量? 假設有2個線程,同時訪問全局變量n; 線程1進入臨界區需要加鎖,等待n>0,不滿足就一直等待;

原创 (P39)posix信號量與互斥鎖

文章目錄1.POSIX 信號量相關函數2.POSIX互斥鎖相關函數3.生產者消費者問題4.自旋鎖與讀寫鎖介紹5.讀寫鎖 1.POSIX 信號量相關函數 (1)有名信號量named semaphore sem_open 打開 s

原创 (P38)posix線程

文章目錄1.線程屬性2.線程特定數據 1.線程屬性 初始化與銷燬屬性 int pthread_attr_init(pthread_attr_t *attr); int pthread_attr_destroy(pthread_

原创 (P37)posix線程

文章目錄1.POSIX線程庫相關函數2.進程和線程的對比3.用線程實現回射客戶/服務器 1.POSIX線程庫相關函數 POSIX線程庫 (1)與線程有關的函數構成了一個完整的系列,絕大多數函數的名字都是以pthread_開頭的

原创 (P36)線程介紹

文章目錄進程的相關概念 多線程有多個控制序列,單線程只有一個控制序列 控制序列(指令序列) 進程的相關概念 程序:完成特定功能的一系列有序指令的集合,通過編譯鏈接成: 可執行文件:稱之爲程序,代碼段(指令)+數據段(指令操作的

原创 (P35)posix共享內存

文章目錄1.shm_open函數2.修改共享內存大小ftruncate4.獲取共享內存對象信息5.shm_unlink函數6.共享內存對象的映射 1.shm_open函數 類似open函數 system v創建共享內存可以指定大

原创 (P33)systemv共享內存與信號量綜合

文章目錄1.用信號量解決生產者消費者問題2.實現shmfifo:實現共享內存的先進先出的環形緩衝區 1.用信號量解決生產者消費者問題 同步與互斥結合的eg 2.實現shmfifo:實現共享內存的先進先出的環形緩衝區 爲什麼

原创 (P32)system v信號量

文章目錄1.用信號量集解決哲學家就餐問題 1.用信號量集解決哲學家就餐問題 信號量的個數不再是一個 如果5個哲學家同時處於飢餓的狀態,同時拿起左邊的叉子,想拿起右邊的叉子,但是拿不起來右邊的叉子,會導致死鎖的發生。 避免該死鎖問

原创 爲什麼/usr/include/linux/stddef.h是空的?

文章目錄1.首先可以測試OS是否有stddef.h頭文件? 1.首先可以測試OS是否有stddef.h頭文件? gcc -E - <<<'#include<stddef.h>' | grep stddef.h 通常情況下C庫的

原创 (P31)system v信號量

文章目錄1.用信號量實現使用臨界區的進程間互斥 1.用信號量實現使用臨界區的進程間互斥 要求: (1)父進程輸出O,子進程輸出X,只有一個進程能夠進入該臨界區 (2)當父進程sleep的時候,子進程也不能獲得臨界區資源,因爲父進

原创 (P34)posix消息隊列

上面只有兩個參數只能打開消息隊列,不能創建消息隊列 man 7 overview 消息隊列存在於系統的虛擬文件系統中,但是該文件系統得掛載到某個目錄底下才能用 QSIZE:消息隊列當前的字節數 關閉不代表刪除,僅僅代

原创 (P30)system v信號量

文章目錄1.信號量2.信號量集結構3.信號量集函數4.信號量eg 1.信號量 信號量和P,V原語由Dijkstra提出 信號量 (1)互斥問題: P,V在同一個進程中 (2)同步問題:P,V在不同進程中 信號量值含義,S表示計數

原创 (P29)system v共享內存

文章目錄1.共享內存數據結構2.共享內存函數3.共享內存eg 1.共享內存數據結構 共享內存示意圖:共享內存可以映射到不同進程的地址空間 共享內存的數據結構如下: 當最後一個進程訪問共享內存結束了,內核也不會自動刪除共享內存段

原创 (12.1)實戰項目:收集系統信息用於分析性能瓶頸

文章目錄1.select循環 1.select循環 會一直循環,取代了給一個菜單,讓用戶讀入的過程 #!/usr/bin/bash select choice in disk_partition filesystem cpu