linux 訊號量實現互斥操作
本次程式實現了通過訊號量來實現父程序與子程序互斥操作,當父程序執行列印操作時子程序被阻塞,當子程序執行列印操作時父程序阻塞。
實現程式碼如下:
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> #include <string.h> #include <signal.h> int semId; int SIZE = 1; union semun { int val; /* Value for SETVAL */ struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ unsigned short *array; /* Array for GETALL, SETALL */ struct seminfo *__buf; /* Buffer for IPC_INFO (Linux-specific) */ }; void Handle(int s){ if(s == 2){ semctl(semId,0,IPC_RMID); exit(0); } } int main(){ signal(2,Handle); key_t key = ftok(".",4); semId = semget(key,1,IPC_CREAT | IPC_EXCL | 0666); union semun val; val.val = SIZE; if(semctl(semId,0,SETVAL,val) == -1){ printf("semctl error!\n"); exit(0); } struct sembuf p; p.sem_num = 0; p.sem_op = -1; p.sem_flg = 0; struct sembuf v = {0,1,0}; if(fork() > 0){ while(1){ semop(semId,&p,1); printf("father go go go!!!\n"); sleep(1); printf("father go go go!!!\n"); sleep(1); printf("father go go go!!!\n"); semop(semId,&v,1); } } else{ while(1){ semop(semId,&p,1); printf("child go go go!!!\n"); sleep(1); printf("child go go go!!!\n"); sleep(1); printf("child go go go!!!\n"); semop(semId,&v,1); } } return 0; }
實現結果如下:
相關推薦
linux 訊號量實現互斥操作
本次程式實現了通過訊號量來實現父程序與子程序互斥操作,當父程序執行列印操作時子程序被阻塞,當子程序執行列印操作時父程序阻塞。實現程式碼如下:#include <stdio.h> #include <unistd.h> #include <stdl
Linux利用訊號量實現執行緒的同步與互斥
執行緒使用互斥鎖可以實現執行緒間的互斥,而互斥鎖本身就是對資源的一種標識狀態,當可以申請到鎖時說明此時資源可以使用,當申請鎖失敗時說明資源此時被其他執行緒所佔用不可使用,我們可以使用訊號量來代替互斥鎖實現。 訊號量用來表示資源數目,當一個執行緒要去訪問資源時,必須先去申請
【Linux】執行緒總結:執行緒同步 -互斥鎖,條件變數,訊號量實現多生產者多消費者模型
學習環境 : Centos6.5 Linux 核心 2.6 Linux執行緒部分總結分為兩部分:(1)執行緒的使用 ,(2)執行緒的同步與互斥。 第一部分執行緒的使用主要介紹,執行緒的概念,建立執行緒,執行緒退出,以及執行緒的終止與分離。【完
利用訊號量和PV操作實現程序互斥和同步問題
在計算機作業系統中,PV操作是程序管理中的難點。 首先應弄清PV操作的含義:PV操作由P操作原語和V操作原語組成(原語是不可中斷的過程),對訊號量進行操作,具體定義如下: P(S):①將訊號量S的值減1,即S=S-1; ②如果S>=0,則該
Linux基礎(四)——訊號量與PV操作
在計算機作業系統中,PV操作是程序管理中的難點。1、基本含義 什麼是訊號量?訊號量(semaphore)的資料結構為一個值和一個指標,指標指向等待該訊號量的下一個程序。訊號量的值與相應資源的使用情況有關。當它的值大於0時,表示當前可用資源的
Linux c++,用訊號量實現消費者生產者佇列(程式碼可直接通過編譯)
//用訊號量實現的一個消費者生產者佇列, #include <iostream> #include <pthread.h> #include <semaphore.h> #include <errno.h> #include <queue>
linux多執行緒程式設計(C):訊號量實現的執行緒安全佇列
用訊號量實現的執行緒安全佇列。 簡單有用的示例程式, 比起互斥量的實現在多執行緒時效率更好。 cir_queue.h /* * \File * cir_queue.h * \Brief * circular queue */#ifndef __CIR_QUEUE_H_
Linux核心同步機制之訊號量和互斥體
訊號量:訊號量(semaphore)是程序間通訊處理同步互斥的機制。是在多執行緒環境下使用的一種措施,它負責協調各個程序,以保證他們能夠正確、合理的使用公共資源。 它和spin lock最大的不同之處就是:無法獲取訊號量的程序可以睡眠,因此會導致系統排程。原理訊號量一般可以用
訊號量 實現程序互斥與同步
訊號量基本術語 現代計算機系統中,多個程序可以併發執行,程序間必然存在共享資源和相互合作的問題。 同步主要是使用者多個程序相互協作,共同完成任務,是程序間的直接制約問題;互斥則主要是為了多個程序分時使用有限的資源。 訊號量(semaphore)是1965
Linux C++Timer(用訊號量實現)
#include <stdio.h> #include <time.h> #include <sys/time.h> #include <stdlib.h> #include <signal.h>
linux下多執行緒同步機制之訊號量、互斥量、讀寫鎖、條件變數
之前有寫過類似的部落格,這東西不用老忘,現在又有更清晰的理解了。 一、訊號量 編譯時候加入-lrt 訊號量最基本的兩個操作就是PV操作:P()操作實現訊號量減少,V()操作實現訊號量的增加 訊號量的值取決於訊號量的型別,訊號量的型別有多種: (1)二進位制訊號量:0與1.
訊號量:整型、記錄型訊號量以及利用訊號量實現程序互斥和前驅關係
訊號量機構是一種功能較強的機制,可用來解決互斥與同步的問題,它只能被兩個標準的原語wait(S)和signal(S)來訪問,也可以記為“P操作”和“V操作”。原語是指完成某種功能且不被分割不被中斷執行的操作序列,通常可由硬體來實現完成不被分割執行特性的功能。如前述的“Tes
【ARM&Linux】Linux訊號量互斥程式設計
《訊號量互斥程式設計示例演示》 /**************************************************************************************** * 檔名: a_pro.c * 建立者:
【linux】系統程式設計-6-POSIX標準下的訊號量與互斥鎖
[toc] --- ## 前言 [原文](https://www.cnblogs.com/lizhuming/p/14299764.html) ## 8. POSIX訊號量 ### 8.1 概念 * 訊號量(Semaphore)是一種實現程序/執行緒間通訊的機制,可以實現程序/執行緒之間同步或臨界資源的
關於Linux訊號量的理解和探討(別說看不懂,耐心看完,你會恍然大悟~)
工作環境(藍色粗體字為特別注意內容) 1,實驗環境:Linux2.6 2,參考文獻:https://www.cnblogs.com/LZYY/p/3453582.html 最近在操作裝置檔案的時候,要求使用獨佔模式使用串列埠裝置,即一個程序用完之後釋放該串列埠,供其他程序使用。該如何實現該
易學筆記-系統分析師考試-第3章 作業系統基本原理/3.2 程序管理/3.2.2 訊號量與PV操作
程序制約方式 間接相互制約:也稱為程序互斥;程序A與程序B都需要資源C(例如印表機),系統已將C分配給A使用,等待A使用完成後系統再將C分配給B使用 直接相互制約:也稱為程序同步;A通過緩衝區向B提供資料,當緩衝區為空時B不能獲取資料而阻塞;當A把資料放入緩衝區後B將被喚醒
訊號量、互斥鎖、讀寫鎖和條件變數之間的區別
訊號量 強調的是執行緒(或程序)間的同步:“訊號量用在多執行緒多工同步的,一個執行緒完成了某一個動作就通過訊號量告訴別的執行緒,別的執行緒再進行某些動作(大家都在sem_wait的時候,就阻塞在那裡)。當訊號量為單值訊號量是,也可以完成一個資源的互斥訪問。 有名
有關訊號量和PV操作的易(粗)懂(淺)理解
大概只有作業系統老師佈置的作業(要交)能讓我認真學習吧…… 訊號量Semaphore 1.有關訊號量的一些說明: 訊號量S是一個整數,S大於等於零時代表可供併發程序使用的資源實體數,但S小於零時
Linux訊號量sem_t簡單例項運用
sem_t sem; 定義一個訊號量變數。使用時需首先使用sem_init()函式初始化。 在多執行緒程式設計中,想讓某個執行緒阻塞等待,減少cpu佔用,在該需要執行時才執行。使用訊號量一個A執行緒sem_wait(),阻塞等待;一個B執行緒在需要執行A執行緒時sem_p
簡單應用訊號量實現程序同步控制
--------參考文獻 W.Richard Stevens, Stephen A.Rago.UNIX環境高階程式設計[M].北京:人民郵電出版社,2014.6:45