java - 訊號量的概念及鎖和訊號量之間的相似和不同之處

來源:互聯網
上載者:User
  • 訊號量

目的:可以使用訊號量來限制訪問一個共用資源的線程數

含義:訊號量指對共同資源進行存取控制的對象。在訪問資源之前,線程必須從訊號量擷取許可,在訪問完資源之後,這個線程必須將許可返回給訊號量。一旦獲得許可,訊號量中可用許可的總數減1,一旦許可被釋放,訊號量中許可數加1.

只有一個許可的訊號量可用來類比一個相互排斥的鎖。

舉例:

鎖和訊號量之間的相似之處和不同之處?

(這裡的鎖指互斥鎖)

區別:

  1. 範圍

訊號量:進程間或者線程間

互斥鎖:線程間

  1. 上鎖時的執行

訊號量:如果訊號量的value > 0;那麼其他的線程可以執行任務。並且成功執行後,value--;如果value=0,那麼線程sem_wait 使得線程阻塞,直到sem_post被釋放後value++,其他的線程才可以根據value執行。

互斥鎖:只有一個對象被上了鎖(加鎖),那麼其他任何線程都不可訪問被加鎖的對象。

  1. 一個是同步一個是互斥

訊號量:用在多線程多任務的同步的,一個線程完成了某個動作就通過訊號量告訴別的線程,別的線程在進行某些動作。

互斥鎖:用在多線程多任務互斥的。一個線程佔用了某個資源後,那麼別的線程就無法訪問,直到這個線程unlock,其他線程才可以利用。

也就是說,訊號量不一定是鎖定某一個資源,而是流程上的概念,比如:有A,B兩個線程,B線程要等A線程完成某一任務以後再進行自己下面的步驟,這個任務並不一定是鎖定某一資源,還可以是進行一些計算或者資料處理之類。而線程互斥量則是“鎖住某一資源”的概念,在鎖定期間內,其他線程無法對被保護的資料進行操作。在有些情況下兩者可以互換。

相關文章:

Java中互斥鎖訊號量與多線程等待機制的樣本

PHP訊號量基本用法執行個體詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.