自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Unix信號(hào)量中加解鎖方法

系統(tǒng) 其他OS
文章中,我們會(huì)講解一些Unix信號(hào)量的知識(shí),大家知道在Unix中,Unix信號(hào)量通常被認(rèn)為是對(duì)資源的訪問(wèn),,Unix信號(hào)量則是防止兩個(gè)或多個(gè)進(jìn)程同時(shí)訪問(wèn)共享資源的一種機(jī)制。

在Unix的System V中,Unix信號(hào)量通常被認(rèn)為是對(duì)資源的訪問(wèn),因此資源可用則用正整數(shù)表示,當(dāng)資源被全部占用,則為零。資源共享是UNIX多用戶系統(tǒng)的一個(gè)重要特征,Unix信號(hào)量(SEMAPHORE)則是防止兩個(gè)或多個(gè)進(jìn)程同時(shí)訪問(wèn)共享資源的一種機(jī)制。在Unix信號(hào)量機(jī)制實(shí)現(xiàn)之前,通常采用加鎖文件的方法,其算法描述如下:

⑴加鎖算法
 

  1. int lock(lockfile)   
  2. /*返回值0代表成功,其它為失敗*/   
  3. char *lockfile; /*加鎖文件名*/   
  4. {   
  5. intfd,ret=0;   
  6. extern int errno;   
  7. if((fd=open(lockfile,O_WRONLY|O_CREAT|O_EXCL,0666))==-1   
  8. &&errno==EEXIST) ret=1;   
  9. return(ret);   
  10. }  

⑵解鎖算法
 

  1. unlock(lockfile)   
  2. char *lockfile; /*鎖文件名*/   
  3. {   
  4. unlink(lockfile);   
  5. }  

這種方法對(duì)訪問(wèn)共享資源次數(shù)較少的進(jìn)程是可行的,但對(duì)重載的使用則開(kāi)銷太大了,況且一旦加鎖失敗則進(jìn)程不知何時(shí)可以再試;當(dāng)系統(tǒng)崩潰或重啟動(dòng)時(shí),加鎖文件可能會(huì)被忘掉了。

Dijkstra發(fā)表的Dekker算法給出了Unix信號(hào)量的一種實(shí)現(xiàn),為整值對(duì)象定義了兩個(gè)了原語(yǔ)操作:P和V。其C描述如下:
 

  1. void P(sem)   
  2. int *sem;   
  3. {   
  4. while (*sem<=0);   
  5. (*sem)--;   
  6. }   
  7. void V(sem)   
  8. int *sem;   
  9. {   
  10. (*sem)++;   
  11. }  

但上述算法不能在用戶空間編程,因?yàn)棰賡em指向的Unix信號(hào)量變量不能在進(jìn)程間共享,它們有自己的數(shù)據(jù)段;②函數(shù)非原子執(zhí)行,內(nèi)核可在任何時(shí)候中斷一個(gè)進(jìn)程;③若sem為0,進(jìn)程并不釋放CPU。

所以Unix信號(hào)量必須由內(nèi)核提供,它可在進(jìn)程間共享數(shù)據(jù),可執(zhí)行原子操作(即一組操作要么全部執(zhí)行,要么都不執(zhí)行),可在一個(gè)進(jìn)程阻塞時(shí)將CPU給另外一個(gè)進(jìn)程。 這次關(guān)于Unix信號(hào)量的知識(shí)就先做個(gè)簡(jiǎn)單的介紹。

【編輯推薦】

  1. 講解Unix線程同步
  2. 靈活運(yùn)用Unix 線程知識(shí)
  3. 教你Unix消息隊(duì)列的應(yīng)用
  4. 教你如何創(chuàng)建Unix消息隊(duì)列
  5. 知識(shí)講解Unix 消息隊(duì)列
責(zé)任編輯:小霞
相關(guān)推薦

2010-04-21 16:50:31

Unix信號(hào)量

2010-04-21 16:25:13

Unix信號(hào)量

2010-04-21 16:42:48

Unix信號(hào)量

2010-04-21 17:10:25

Unix信號(hào)量

2021-04-13 09:20:15

鴻蒙HarmonyOS應(yīng)用開(kāi)發(fā)

2020-11-05 09:59:24

Linux內(nèi)核信號(hào)量

2021-09-07 07:53:42

Semaphore 信號(hào)量源碼

2020-09-25 07:34:40

Linux系統(tǒng)編程信號(hào)量

2024-10-29 15:23:45

Python線程安全

2019-11-19 09:00:38

JavaAND信號(hào)量

2010-03-17 16:36:10

Java信號(hào)量模型

2010-07-15 15:32:10

Perl線程

2009-12-08 12:14:43

2010-03-16 17:52:27

Java多線程信號(hào)量

2016-11-23 16:08:24

Python處理器分布式系統(tǒng)

2017-05-11 14:05:25

Consul分布式信號(hào)量

2021-02-03 20:10:29

Linux信號(hào)量shell

2020-11-10 15:25:26

SemaphoreLinux翻譯

2025-04-16 08:50:00

信號(hào)量隔離線程池隔離并發(fā)控制

2021-08-30 08:03:22

信號(hào)量庫(kù)Go
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)