一、selectselect目前幾乎在所有的平台上支持,其良好跨平台支持也是它的一個優點,事實上從現在看來,這也是它所剩不多的優點之一。select的一個缺點在於單個進程能夠監視的文件描述符的數量存在最大限制,在Linux上一般為102
I/O多路轉接:先構造一張有關描述符的列表,然後調用一個函數,直到這些描述符中的一個已准備好進行I/O時,該函數才返回。在返回時,它告訴進程哪些描述符已准備好可以進行I/O。poll、pselect和select這三個函數使我們能夠執行
非阻塞I/O使我們可以調用open、read和write這樣的I/O操作,並使這些操作不會永遠阻塞。如果這種操作不能完成,則調用立即出錯返回,表示該操作如繼續執行將阻塞。對於一個給定的描述符有兩種方法對其指定非阻塞:(1)如果調用ope
一、記錄鎖 record locking功能:當一個進程正在讀或修改文件的某個部分時,它可以阻止其它進程修改同一文件區。字節范圍鎖 byte-range locking二、歷史flock函數,可以鎖整個文件,不能鎖文件中的一部分。fcn
共享內存可以說是最有用的進程間通信方式,也是最快的IPC形式,因為進程可以直接讀寫內存,而不需要任何數據的拷貝。對於像管道和消息隊列等通信方式,則需要在內核和用戶空間進行四次的數據拷貝,而共享內存則只拷貝兩次數據: 一次從輸入文件到共享
共享內存區域是被多個進程共享的一部分物理內存。如果多個進程都把該內存區域映射到自己的虛擬地址空間,則這些進程就都可以直接訪問該共享內存區域,從而可以通過該區域進行通信。共享內存是進程間共享數據的一種最快的方法,一個進程向共享內存區域寫入
unix早期通信機制中的信號能夠傳送的信息量有限,管道則只能傳送無格式字節流,這遠遠是不夠的。消息隊列(也叫報文隊列)客服了這些缺點:消息隊列就是一個消息的鏈表。可以把消息看作一個記錄,具有特定的格式。進程可以按照一定的規則向消息隊列中
1. 信號量(semaphore)主要用於保護臨界資源。進程可以根據它判斷是否能訪問某些共享資源。信號量除了用於訪問控制外,還可用於進程同步,也就是進程間通信。2. 信號量分類:a. 二值信號量: 信號量的值只能取0或1,類似於互斥鎖m
線程私有數據(Thread-specific data,TSD):存儲和查詢與某個線程相關數據的一種機制。 在進程內的所有線程都共享相同的地址空間,即意味著任何聲明為靜態或外部變量,或在進程堆聲明的變量,都可以被進程內所有的線
互斥量具有一些屬性,通過修改這些屬性可以控制鎖的一些行為。缺省的互斥鎖屬性及其值如下:pshared: PTHREAD_PROCESS_PRIVATEtype: &n
說到線程的分離狀態,我認為,之所以會有這個狀態,是因為系統對某些線程的終止狀態根本不感興趣導致的。我們知道,進程中的線程可以調用:int pthread_join(pthread_t tid, void **rval_ptr);來等待某
並發度控制著用戶級線程可以映射的內核線程或進程的數目。如果操作系統的實現在內核級的線程和用戶級的線程之間保持一對一的映射,那麼改變並發度並不會有什麼效果,因為所有的用戶級線程都可能被調度到。但是,如果操作系統的實現讓用戶級線程到內核級線
pthread_attr_t 的缺省屬性值1、初始化一個線程對象的屬性int pthread_attr_init(pthread_attr_t *attr);返回值:若是成功返回0,否則返回錯誤的編號形 參: attr &n
一、使用互斥鎖1、初始化互斥量pthread_mutex_t mutex =PTHREAD_MUTEX_INITIALIZER;//靜態初始化互斥量 int pthread_mutex_init(pthread_mutex_t*mut
進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的並發性。進程和線程的區別在於:(1)一個程序至少有一個進程,一個進程至少有一個線程。(2)線程的劃分尺度小於進程,使得多線程程序的並發性高。另外,進程
操作系統中有若干進程並發執行,它們不斷申請、使用、釋放系統資源,雖然系統的進程協調、通信機制會對它們進行控制,但也可能出現若干進程都相互等待對方釋放資源才能繼續運行,否則就阻塞的情況。此時,若不借助外界因素,誰也不能釋放資源,誰也不能解
每個線程都有自己的信號屏蔽字,但是信號的處理是進程中所有線程共享的。這意味著盡管單個線程可以阻止某些信號,但當線程修改了與某個信號相關的處理行為以後,所有的線程都必須共享這個處理行為的改變。這樣如果一個信號選擇忽略某個信號,而其他的線程
當線程調用fork時,就為子進程創建了整個進程地址空間的副本。子進程通過繼承整個地址空間的副本,也從父進程那裡繼承了所有互斥量、讀寫鎖和條件變量的狀態。如果父進程包含多個線程,子進程在fork返回以後,如果緊接著不是馬上調用exec的話