1. 程式人生 > >NET多執行緒同步方法詳解(五):訊號量(Semaphore)

NET多執行緒同步方法詳解(五):訊號量(Semaphore)

   訊號量就像一個夜總會:它有確切的容量,並被保鏢控制。一旦滿員,就沒有人能再進入,其他人必須在外面排隊。那麼在裡面離開一個人後,隊頭的人就可以進入。訊號量的建構函式需要提供至少兩個引數-現有的人數和最大的人數。
訊號量的行為有點類似於Mutex或是lock,但是訊號量沒有擁有者。任意執行緒都可以呼叫Release來釋放訊號量而不像Mutex和lock那樣需要執行緒得到資源才能釋放。 
class SemaphoreTest 
    {
        
static Semaphore s =new Semaphore(33); // 當前值=3; 容量=3 staticvoid Main() 
        {
            
for (int i =0; i <10; i++
                
new Thread(Go).Start(); 
        } 
        
staticvoid Go()
        {
            
while (true)
            {
                s.WaitOne();
                Thread.Sleep(
100); // 一次只有個執行緒能被處理                 s.Release(); 
            } 
        }
    } 
 

相關推薦

NET執行同步方法()訊號(Semaphore)

   訊號量就像一個夜總會:它有確切的容量,並被保鏢控制。一旦滿員,就沒有人能再進入,其他人必須在外面排隊。那麼在裡面離開一個人後,隊頭的人就可以進入。訊號量的建構函式需要提供至少兩個引數-現有的人數和最大的人數。 訊號

JAVA執行 join() 方法及應用場景

在某些情況下,主執行緒建立並啟動了子執行緒,如果子執行緒中需要進行大量的耗時運算,主執行緒往往將早於子執行緒結束之前結束,如果主執行緒想等待子執行緒執行完畢後,獲得子執行緒中的處理完的某個資料,就要用

java執行-join方法(附面試題)

本文對java Thread中join()方法進行介紹,join()的作用是讓“主執行緒”等待“子執行緒”結束之後才能繼續執行,大家參考使用吧 本章涉及到的內容包括: 1. join()

C++11執行(七):《 std::future & std::shared_future》

#include <iostream>                // std::cout #include <future>                // std::async, std::future #include <chrono>            

lock Mutex Monitor 之間的區別與, .net 執行 同步非同步操作,鎖

Framework為我們提供了三個加鎖的機制,分別是Monitor類、Lock關 鍵字和Mutex類。   總體而言,lock和monitor可以鎖定物件,也可以鎖定函式;而mutex一般用於鎖定函式,並保證不同執行緒間同步呼叫函式,而不會受執行緒優先順序影響。使用lo

Java執行——synchronized使用

一 前言 Java多執行緒是面試必考的知識點,哈哈,說的有點太絕對了,題外話不說那麼多了,今天我們就來了解一下Java多執行緒中的synchronized。 synchronized相信大家都看過或者用過,synchronized是Java中的關鍵字,synchronized可以

ThreadLocal 執行環境使用

ThreadLocal 介紹 ThreadLocal  就是一個Map。key - > Thread.getCurrentThread()。value - > 執行緒需要儲存的變數。在多執行緒環境中,相當於各自執行緒的一個內部map變數。 每個

執行屬性pthread_attr

Posix執行緒中的執行緒屬性pthread_attr_t主要包括scope屬性、detach屬性、堆疊地址、堆疊大小、優先順序。在pthread_create中,把第二個引數設定為NULL的話,將採用預設的屬性配置。 執行緒屬性結構如下: typedef s

Java執行---阻塞佇列(舉例說明)

一. 前言   在新增的Concurrent包中,BlockingQueue很好的解決了多執行緒中,如何高效安全“傳輸”資料的問題。通過這些高效並且執行緒安全的佇列類,為我們快速搭建高質量的多執行緒程式帶來極大的便利。本文詳細介紹了BlockingQueue家庭中的所有成員

java執行小示例

package com.chillax.controller; import java.io.IOException; public class MultiThread { public static void main(String[] args) { System.out.p

執行同步方法彙總

多執行緒同步方法彙總 為什麼需要同步? synchronized關鍵字 使用同步鎖 執行緒通訊 Volatile關鍵字 參考文獻 為什麼需要同步? 多個執行緒同時訪問一個物件時,可能會同時出現讀寫這個物件,那麼這個物件

執行傳參

1.傳遞臨時物件做執行緒引數 1.1要避免的陷阱1 用detach()時,如果主執行緒先結束,變數就會被回收;所以用detach()的話,不推薦用引用,同時絕對不能用指標。 1.2要避免的陷阱2 只要臨時物件的用臨時構造A類物件作為引數傳遞給執行緒,那麼就一定能夠在主執行緒結束之

執行安全問題

在上一篇部落格中已經提到了什麼是多執行緒:https://blog.csdn.net/weixin_42647847/article/details/80969240那多執行緒在java中是如何實現的呢。一、實現多執行緒的四種方式1.繼承Thread類,重寫run方法2.實現

執行】BlockingQueue

前言:      在新增的Concurrent包中,BlockingQueue很好的解決了多執行緒中,如何高效安全“傳輸”資料的問題。通過這些高效並且執行緒安全的佇列類,為我們快速搭建高質量的多執行緒程式帶來極大的便利。本文詳細介紹了BlockingQueue家庭中的所有成員

PHP Curl執行原理例項

<?php  // 建立一對cURL資源  $ch1 = curl_init();  $ch2 = curl_init();  // 設定URL和相應的選項  curl_setopt($ch1, CURLOPT_URL, "http://www.jb51.net/");  curl_setopt($

執行同步方法資料庫悲觀鎖(for update)

 悲觀鎖,正如其名,具有強烈的獨佔和排他特性。上來就鎖住,把事情考慮的比較悲觀,它是採用資料庫機制實現的,資料庫被鎖之後其它使用者將無法檢視,直到提交或者回滾,鎖釋放之後才可檢視。所以悲觀鎖具有其霸道

Android 開發之執行處理——Handler

    Android開發過程中為什麼要多執行緒     我們建立的Service、Activity以及Broadcast均是一個主執行緒處理,這裡我們可以理解為UI執行緒。但是在操作一 些耗時操作時,比如I/O讀寫的大檔案讀寫,資料庫操作以及網路下載需要很長時間,為了不

.net 執行同步方式總結

在多執行緒開發中,共享物件的同步是經常遇到的問題,以下總結了C#中執行緒同步的幾種技術: 1,InterLocked原子操作 Decrement(ref int location);遞減1 Add(ref int location1, int value);location

vb.net執行同步呼叫例項

Imports System.Threading  '看名字就知道,這個類幹什麼用的,多執行緒應用程式都要用這個類 Public Delegate Function BinaryOp(ByVal x As Integer, ByVal y As Integer) As Integer Module Mod

Java執行-Thread.yield

http://blog.csdn.net/dabing69221/article/details/17426953 Thread.yield( )方法: 使當前執行緒從執行狀態(執行狀態)變為可執行態(就緒狀態)。cpu會從眾多的可執行態裡選擇,也就是說,當前也就