原创 進程間通信(IPC)3 ------ 消息隊列 - 2

      上文將消息隊列中放入了數據,其他進程就可以從中讀取消息了。讀取消息的函數是msgrcv(),該函數原型爲: #include <sys/msg.h> int msgrcv(int msgid, struct msgbuf *m

原创 線程同步2 ------ 條件變量實現“生產者-消費者”續

      在上一篇轉載博客的基礎上,我想實現當生產者結束生產任務後,讓消費者線程優雅主動地退出循環結束線程。具體代碼修改如下。但是事與願違,執行結果是,只有消費者線程裏的第一個線程,能夠主動退出循環結束線程,而其他消費者線程仍然不停地輪

原创 進程間通信(IPC)3 ------ 消息隊列 - 1

      消息隊列是一個存放在內核中的消息鏈表,由消息隊列標識符標識。       向消息隊列發送消息時,必須組成合理的數據結構。Linux系統定義了一個模板數據結構msgbuf: #include <linux/msg.h> stru

原创 進程間通信(IPC)2 ------ 有名管道

      管道的一個不足之處是沒有名字,因此只能在具有親緣關係的進程之間通信。而“有名管道”與此不同,它提供了一個路徑名與之關聯,作爲一個設備文件存在,即使無親緣關係的進程之間,只要能訪問該路徑,也可以通過FIFO進行通信。FIFO總是

原创 線程同步2 ------ 條件變量

      條件變量是利用線程間共享的全局變量進行同步的一種機制。條件變量宏觀上類似if語句,符合條件就能執行某段程序,否則只能等待條件成立。       使用條件變量主要包括2個動作:一個等待使用資源的線程“等待條件變量被設置爲真”;另

原创 線程同步3 ------ 信號量實現進程或者線程之間的同步

基本概念       首先要注意,信號量和信號是完全兩碼事。信號量是一個計數器,常用於處理進程或線程的同步問題,特別是對臨界資源訪問的同步。臨界資源可以簡單地理解爲在某一時刻只能由一個進程或線程進行操作的資源。通常,程序對共享資源的訪問的

原创 線程同步3 ------ Linux進程間通信——使用信號量

轉載自:http://blog.csdn.net/ljianhui/article/details/10243617 這篇文章將講述別一種進程間通信的機制——信號量。注意請不要把它與之前所說的信號混淆起來,信號與信號量是不同的兩種事物。

原创 線程同步2 ------ 用條件變量來解決生產者消費者問題

轉載自:http://blog.csdn.net/chen_mama/article/details/47429695 在上一篇文章中,我使用了匿名信號量 什麼是條件變量?  我們可以設想一個場景:線程A需要某個條件成立才能繼續執行

原创 定時器信號的用法

#include <stdio.h> #include <signal.h> #include <sys/time.h> #include <unistd.h> /*信號處理程序*/ void handler_sigtime(int s

原创 進程間通信(IPC)4 ------ 共享內存(配合使用信號量進行同步)

      共享內存就是能被不同進程共同訪問的一塊內存。       函數shmget()用以創建一個共享內存,或者訪問一個已存在的共享內存。原型如下: #include <linux/shm.h> int shmget(key_t k

原创 線程同步3 ------ 信號量在不同進程間同步的又一個實例

      以下實例通過信號量實現對臨界資源的同步訪問問題。server程序創建一個信號集,並對信號量循環減1,相當於分配資源。而client在執行時首先檢查信號量,如果大於0代表有資源可用,就繼續執行。如果信號量小於0代表資源已經分配完

原创 線程同步1 ------ 互斥鎖 ------一個更加典型的例子

      上一篇博文裏,舉了一個簡單的應用共享鎖的例子。本篇博文將介紹一個稍微更加複雜點的例子。       有一個全局變量數組out,包含100個元素,所有元素初始化爲0。然後開啓2個子線程同時對數組out進行賦值操作。在此過程,應該

原创 信號的捕獲和處理

      信號(signal)是在特定事件發生時由操作系統向進程發送的消息。它一種軟件中斷,是進程間唯一的異步通信方式。       信號有很多,常見的有: SIGINT:在鍵盤按下<Ctrl+C>組合鍵後產生,默認動作爲終止進程SI

原创 進程間通信(IPC)1 ------ 管道

      進程的地址空間是互相獨立的,因此進程之間交互數據必須採用專門的通信機制。尤其是在大型的軟件系統中,往往需要多個進程互相協作共同完成一個任務,這就需要使用進程間通信(Inter-Process Connection, IPC)編

原创 線程同步1 ------ 互斥鎖

      和多進程相比,多線程的最大特點就是資源的共享。然而共享卻涉及到一個同步的問題,這是多線程編程的難點。Linux系統提供了多種方式處理線程間的同步問題,主要有互斥鎖、條件變量和異步信號。本文先講互斥鎖。       互斥鎖通過