參考: https://zhuanlan.zhihu.com/p/93609693
https://www.cnblogs.com/Anker/archive/2013/08/17/3263780.html
代碼實現: int num = 0; pthread_mutex_t mutex ; pthread_cond_t condition; void *producer(void *arg) {pthread_mutex_lock(&
所謂系統調用其實是操作系統提供給用戶程序的一組“特殊”函數接口,可以直接這麼去理解,操作系統是一個很大的“函數庫”,它給程序員提供了很多可以調用的函數。 系統調用按照功能邏輯大致可分爲:進程控制、進程間通信、
背景:APUE這些年陸陸續續看了幾遍,一直是桌子邊的必放的參考書,但是一直沒有把它的例子程序玩一遍,這一直是我心中的遺憾。今天嘗試把原書(第二版)提供的代碼下載下來,在我用的機器上跑起來,算了卻我這個心願的頭一步吧。獲取APUE代碼
文章目錄sigaction 結構體調試程序sigaciton 函數 sigaction 結構體 下面的結構體需要傳到sigaction函數內使用的 struct sigaction { void (*sa_handler)
Linux系統設置系統時間有兩種方法: 1.使用命令date 2.使用系統調用settimeofday,gettimeofday 注意:不管使用上面哪一種方法都必須是root權限。 如果系統連接上了網絡,設置的時間和網絡時間不同,系統會自
當程序在執行處於阻塞狀態的系統調用時接收到信號,並且我們爲該信號設置了信號處理函數,在信號處理函數返回後,程序將面臨繼續執行或不執行慢速系統調用兩種選擇,默認情況下是系統調用將被中斷,並且errno被設置爲EINTR。我們可以選擇
信號是一種異步事件:信號處理函數和程序的主循環是兩條不同的執行路線。我們希望信號處理函數儘快地執行完畢,以確保該信號不會屏蔽(爲了避免一些竟態條件,信號在處理期間,系統不會再次觸發它)太久。(由於信號集採用位圖這種數據結構,導致在
1.gcc包含的c/c++編譯器 gcc,cc,c++,g++,gcc和cc是一樣的,c++和g++是一樣的。一般c程序就用gcc編譯,c++程序就用g++編譯。 2.gcc的基本用法 gcc test.c這樣將編譯出一個名爲a.
通過賦值語句可以在兩個文件描述符集之間進行賦值,例如可以這樣寫: fd_set readset,tmpset; FD_ZERO(&readset); FD_ZERO(&tmpset); FD_SET(listener,&tmp
01. 文件描述符 在 Linux 的世界裏,一切設備皆文件。我們可以使用系統調用中 I/O 的函數(I:input,輸入;O:output,輸出),對文件進行相應的操作( open()、close()、write() 、read() 等
01. 讀寫鎖概述 當有一個線程已經持有互斥鎖時,互斥鎖將所有試圖進入臨界區的線程都阻塞住。但是考慮一種情形,當前持有互斥鎖的線程只是要讀訪問共享資源,而同時有其它幾個線程也想讀取這個共享資源,但是由於互斥鎖的排它性,所有其它線程都無法獲
01. 互斥鎖引入 爲什麼需要互斥鎖? 在多任務操作系統中,同時運行的多個任務可能都需要使用同一種資源。這個過程有點類似於,公司部門裏,我在使用着打印機打印東西的同時(還沒有打印完),別人剛好也在此刻使用打印機打印東西,如果不做任何處理的
01. 進程和線程區別 在許多經典的操作系統教科書中,總是把進程定義爲程序的執行實例,它並不執行什麼, 只是維護應用程序所需的各種資源,而線程則是真正的執行實體。 爲了讓進程完成一定的工作,進程中必須至少包含一個線程。 進程,直觀點說,
01. 孤兒進程概述 父進程運行結束,但子進程還在運行的子進程就稱爲孤兒進程(Orphan Process)。孤兒進程最終會被 init 進程(進程號爲 1 )所收養,並由 init 進程對它們完成狀態收集工作。 孤兒進程是沒有父進程的進
01. 概述 大端模式(Big-endian):高位字節排放在內存的低地址端,低位字節排放在內存的高地址端,即正序排列,高尾端; 小端模式(Little-endian):低位字節排放在內存的低地址端,高位字節排放在內存的高地址端,即逆序排