Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 等待完全释放的信号量?_.net_Multithreading_Concurrency_Semaphore - Fatal编程技术网

.net 等待完全释放的信号量?

.net 等待完全释放的信号量?,.net,multithreading,concurrency,semaphore,.net,Multithreading,Concurrency,Semaphore,有没有可能(在.net中)让线程等待信号量被“完全信号化”呢?具体来说,下面是我要寻找的: 在主线程中创建信号量。 使用.WaitOne()将许多其他线程排队。 释放所有信号量的句柄。 等待其所有句柄为“空” 在主线程中恢复操作 为了清晰起见,下面是一些经过整理的代码: using System; using System.Threading; namespace ConcurrencySample01 { class Program { private sta

有没有可能(在.net中)让线程等待信号量被“完全信号化”呢?具体来说,下面是我要寻找的:

在主线程中创建信号量。 使用.WaitOne()将许多其他线程排队。 释放所有信号量的句柄。 等待其所有句柄为“空” 在主线程中恢复操作

为了清晰起见,下面是一些经过整理的代码:

using System;
using System.Threading;

namespace ConcurrencySample01
{
    class Program
    {
        private static Semaphore _MaitreD = new Semaphore(0, 4);
        private static Random _Rnd = new Random();

        static void Main(string[] args)
        {
            Console.WriteLine("The restaurant is closed. No one can eat.");
            Thread.Sleep(1000);

            for (int i = 1; i <= 6; i++)
            {
                Thread t = new Thread(Diner);
                t.Start(i);
            }
            Console.WriteLine("The restaurant is opening.");
            Console.WriteLine("Empty seat count: {0}", 4 - _MaitreD.Release(4));

            // HERE IS WHERE I WANT TO WAIT.

            Console.WriteLine("The table is empty.");
            Console.ReadLine();

        }


        private static void Diner(object num)
        {
            Console.WriteLine("Diner {0} enters the restaurant and requests a seat.", num);
            _MaitreD.WaitOne();
            Console.WriteLine("Diner {0} sits down and begins to eat.", num);
            Thread.Sleep(1000 + _Rnd.Next(1000));
            Console.WriteLine("Diner {0} finishes and gets up.", num);
            Console.WriteLine("Empty seat count: {0}", _MaitreD.Release() + 1);
        }



    }
}
使用系统;
使用系统线程;
命名空间并发示例01
{
班级计划
{
私有静态信号量_MaitreD=新信号量(0,4);
私有静态随机_Rnd=新随机();
静态void Main(字符串[]参数)
{
控制台。WriteLine(“餐厅关门了,没人可以吃饭。”);
睡眠(1000);

对于(int i=1;i这里需要两个同步对象。一个已经得到的同步对象,一个信号量对表进行建模。您需要另一个同步对象来对门进行建模。一个事件。

很好。从概念上讲,“空”信号量可能并不意味着其使用寿命的结束,这有很多原因。