成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺析Unix信號(hào)量知識(shí)

系統(tǒng) 其他OS
我們來(lái)學(xué)習(xí)下Unix信號(hào)量的知識(shí)。信號(hào)量(Semaphore),有時(shí)被稱為信號(hào)燈,是在多線程環(huán)境下使用的一種設(shè)施,是可以用來(lái)保證兩個(gè)或多個(gè)關(guān)鍵代碼段不被并發(fā)調(diào)用。

在Unix信號(hào)量機(jī)制實(shí)現(xiàn)之前,通常采用加鎖文件的方法。信號(hào)量(Semaphore),有時(shí)被稱為信號(hào)燈,是在多線程環(huán)境下使用的一種設(shè)施,是可以用來(lái)保證兩個(gè)或多個(gè)關(guān)鍵代碼段不被并發(fā)調(diào)用。在進(jìn)入一個(gè)關(guān)鍵代碼段之前,線程必須獲取一個(gè)信號(hào)量;一旦該關(guān)鍵代碼段完成了,那么該線程必須釋放信號(hào)量。

其它想進(jìn)入該關(guān)鍵代碼段的線程必須等待直到***個(gè)線程釋放信號(hào)量。為了完成這個(gè)過(guò)程,需要?jiǎng)?chuàng)建一個(gè)信號(hào)量VI,然后將Acquire Semaphore VI以及Release Semaphore VI分別放置在每個(gè)關(guān)鍵代碼段的首末端。確認(rèn)這些信號(hào)量VI引用的是初始創(chuàng)建的信號(hào)量。

系統(tǒng)調(diào)用semop用來(lái)對(duì)Unix信號(hào)量集合中的一個(gè)或多個(gè)信號(hào)量進(jìn)行操作,操作命令由用戶提供的操作結(jié)構(gòu)數(shù)組來(lái)定義,該結(jié)構(gòu)如下:

  1. struct sembuf{   
  2. short sem_num; /*信號(hào)量在集合中的下標(biāo)*/   
  3. short sem_op; /*操作值*/   
  4. short sem_flg; /*操作標(biāo)志*/   
  5. };  

系統(tǒng)從用戶地址空間讀Unix信號(hào)量操作結(jié)構(gòu)數(shù)組,并核實(shí)信號(hào)量下標(biāo)的合法性及進(jìn)程是否具備讀或修改信號(hào)量所必需的權(quán)限。若權(quán)限不夠則調(diào)用失敗;若進(jìn)程必須睡眠,則它將已操作過(guò)的信號(hào)量恢復(fù)為該系統(tǒng)調(diào)用開(kāi)始時(shí)的值,然后它就睡眠,直到它等待的事件發(fā)生時(shí)再重新執(zhí)行該系統(tǒng)調(diào)用。

由于系統(tǒng)將操作數(shù)組保存在一個(gè)全局?jǐn)?shù)組中,因此若它必須重新執(zhí)行該調(diào)用的話,它必須重新從用戶空間讀該數(shù)組。這樣,操作按原語(yǔ)方式執(zhí)行--或一次做完或根本不做。

系統(tǒng)根據(jù)操作值來(lái)改變信號(hào)量的值:

①若操作值為正,系統(tǒng)就增加信號(hào)量的值并喚醒所有等待信號(hào)量增值的進(jìn)程;
②若操作值是0,系統(tǒng)就檢查信號(hào)量的值:如果為0,就繼續(xù)數(shù)組中的其它操作;否則把等待信號(hào)量的值為0的睡眠進(jìn)程數(shù)加1,然后睡眠;
③若操作值為負(fù)且其絕對(duì)值不超過(guò)信號(hào)量的值,系統(tǒng)就把操作值(一個(gè)負(fù)數(shù))加到信號(hào)量值上,如果結(jié)果為0則系統(tǒng)就喚醒所有等待信號(hào)量的值為0的睡眠進(jìn)程;
④若信號(hào)量的值小于操作值的絕對(duì)值,系統(tǒng)就讓進(jìn)程睡眠在"等待信號(hào)量增值"這一事件上。

當(dāng)進(jìn)程在Unix信號(hào)量操作過(guò)程中睡眠時(shí),它睡眠在可中斷級(jí)上,因此當(dāng)它接收到軟中斷信號(hào)時(shí)就被喚醒了。用戶可在操作標(biāo)志中設(shè)置IPC_NOWAIT標(biāo)志以防止進(jìn)程睡眠。

如果進(jìn)程執(zhí)行了一個(gè)信號(hào)量操作,鎖住了某些資源,卻沒(méi)有恢復(fù)信號(hào)量的值就退出了(如收到kill信號(hào)),那么就可能出現(xiàn)危險(xiǎn)情況。為了避免這類問(wèn)題,用戶可在操作標(biāo)志中設(shè)置SEM_UNDO標(biāo)志。當(dāng)進(jìn)程退出時(shí),系統(tǒng)便撤除該進(jìn)程做過(guò)的每個(gè)信號(hào)量操作的影響。

值得指出的是,當(dāng)你使用兩個(gè)或多個(gè)Unix信號(hào)量時(shí),死鎖總是可能的,系統(tǒng)并不能檢查多個(gè)信號(hào)量間的死鎖。

本文所用算法及調(diào)用格式均已在SCOUNIX3.2、SCOOpenSever3.X及5.X上運(yùn)行通過(guò)。

【編輯推薦】

  1. Unix信號(hào)量常用的操作
  2. 靈活運(yùn)用Unix 線程知識(shí)
  3. 學(xué)習(xí)簡(jiǎn)單的Unix信號(hào)量
  4. 教你如何創(chuàng)建Unix消息隊(duì)列
  5. 知識(shí)講解Unix 消息隊(duì)列
責(zé)任編輯:小霞
相關(guān)推薦

2010-04-21 17:10:25

Unix信號(hào)量

2010-04-21 16:25:13

Unix信號(hào)量

2010-04-21 16:42:48

Unix信號(hào)量

2010-04-21 15:37:38

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)量

2010-04-21 11:15:55

Unix 命令

2024-10-29 15:23:45

Python線程安全

2019-11-19 09:00:38

JavaAND信號(hào)量

2010-04-19 17:44:56

Unix操作系統(tǒng)

2009-12-08 12:14:43

2010-03-17 16:36:10

Java信號(hào)量模型

2010-07-15 15:32:10

Perl線程

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

2010-03-16 17:52:27

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

2020-11-10 15:25:26

SemaphoreLinux翻譯
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 成人在线精品 | 欧美精品第一区 | 九九热在线免费视频 | 奇米影视首页 | 亚洲v日韩v综合v精品v | 久久er99热精品一区二区 | 91九色麻豆 | 久久精品91 | 国产精品一区二区三区在线 | 久久国产精品-国产精品 | 九九亚洲 | 日韩成人中文字幕 | 精品欧美乱码久久久久久1区2区 | 久久精品欧美一区二区三区不卡 | 午夜激情网 | 男女网站免费观看 | 国产成人综合在线 | 一区二区三区日韩精品 | 风间由美一区二区三区在线观看 | 久久精品中文 | 欧美激情一区二区 | 久久久久久久久久久蜜桃 | 在线看av的网址 | 国产综合久久久 | 人人干人人艹 | 在线一区二区三区 | 一区二区三区在线免费观看 | 玩丰满女领导对白露脸hd | 91久久精| 国产精品国产三级国产aⅴ中文 | 日日精品| 国产日韩欧美 | 欧美成人一区二免费视频软件 | 91中文视频| 毛片一级片 | 欧美一级特黄aaa大片在线观看 | 久久精品视频在线免费观看 | 国产一二三区在线 | 在线播放第一页 | 亚洲精品在线看 | 欧美a区 |