亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么是信號量?

什么是信號量?

信號量是一種編程概念,經常用于解決多線程問題。我對社區的問題:什么是信號量,如何使用?
查看完整描述

3 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

將信號量視為夜總會里的蹦蹦跳跳。一次有大量的人員被允許進入俱樂部。如果俱樂部已滿,則不允許任何人進入,但是一旦一個人離開,另一個人可能會進入。


這只是限制特定資源使用者數量的一種方法。例如,限制同時調用應用程序中的數據庫的次數。


這是C#中非常教學法的示例:-)


using System;

using System.Collections.Generic;

using System.Text;

using System.Threading;


namespace TheNightclub

{

    public class Program

    {

        public static Semaphore Bouncer { get; set; }


        public static void Main(string[] args)

        {

            // Create the semaphore with 3 slots, where 3 are available.

            Bouncer = new Semaphore(3, 3);


            // Open the nightclub.

            OpenNightclub();

        }


        public static void OpenNightclub()

        {

            for (int i = 1; i <= 50; i++)

            {

                // Let each guest enter on an own thread.

                Thread thread = new Thread(new ParameterizedThreadStart(Guest));

                thread.Start(i);

            }

        }


        public static void Guest(object args)

        {

            // Wait to enter the nightclub (a semaphore to be released).

            Console.WriteLine("Guest {0} is waiting to entering nightclub.", args);

            Bouncer.WaitOne();          


            // Do some dancing.

            Console.WriteLine("Guest {0} is doing some dancing.", args);

            Thread.Sleep(500);


            // Let one guest out (release one semaphore).

            Console.WriteLine("Guest {0} is leaving the nightclub.", args);

            Bouncer.Release(1);

        }

    }

}


查看完整回答
反對 回復 2019-11-04
?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

Mutex:對資源的獨占成員訪問


信號量:對資源的n成員訪問


也就是說,互斥鎖可用于同步訪問計數器,文件,數據庫等。


一個sempahore可以做同樣的事情,但是支持固定數量的同時呼叫者。例如,我可以將數據庫調用包裝在semaphore(3)中,這樣我的多線程應用程序最多可以同時連接3個數據庫。所有嘗試將阻塞,直到打開三個插槽之一。它們使像天真節流這樣的事情變得非常非常容易。



查看完整回答
反對 回復 2019-11-04
  • 3 回答
  • 0 關注
  • 450 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號