RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1592119
Accepted
Marat
Marat
Asked:2024-08-28 14:20:36 +0000 UTC2024-08-28 14:20:36 +0000 UTC 2024-08-28 14:20:36 +0000 UTC

C#中Semaphore中initialCount和maximumCount的作用是什么?

  • 772

我想了很久还是没明白。initialCount和 和有什么区别maximumCount?负责什么?maximumCount如果initialCount这是同时运行的最大线程数,为什么会这样?和类似的问题。

我的理解是initialCount它负责同时运行的线程数量,maximumCount但不清楚。

我在某处读到:

initialCount负责通话次数WaitOne(),a-maximumCount负责通话次数Release()。

这是事情变得更加不清楚的地方。

一般来说,如果有人充分解释他们的职责,我将不胜 initialCount感激maximumCount。

c#
  • 2 2 个回答
  • 55 Views

2 个回答

  • Voted
  1. MBo
    2024-08-28T14:56:17Z2024-08-28T14:56:17Z

    信号量有一个内部计数器,用于显示信号量控制的当前对象数量(例如,正在运行的线程数量)。

    如果您在创建信号量时指定initialCount =0,则信号量处于繁忙状态。如果您现在启动等待信号量的线程,它们将会阻塞。

    为了使信号量进入有信号状态,您需要ReleaseSemaphore使用所需的 number来执行n。在这种情况下,信号量计数器变得等于n。

    如果ReleaseSemaphore传输的数字太大,使得总数текущий счётчик + release超过MaximumCount,则当前计数器不改变

    当信号量进入有信号状态,并且有线程在等待该信号量时,每个线程(不超过n)从 Wait 函数成功返回;每成功一次 Wait,信号量计数器就会减 1。如果n有多个等待对象,则计数器重置为零,信号量进入繁忙状态,并且额外的线程继续等待。

    当一个线程终止时,它(通常)应该被调用ReleaseSemaphore(1),并且计数器加一;信号量向下一个等待对象发出信号。

    请注意,您可以创建一个非零的信号量initialCount,然后它立即准备好运行适当数量的线程

    • 2
  2. Best Answer
    CrazyElf
    2024-08-28T16:14:55Z2024-08-28T16:14:55Z

    一般来说,所有内容都在文档中写得很清楚,甚至在初始计数器小于最大值时给出了示例。原则上,它们已经有了不言自明的名称。

    您只需考虑几个不同的用例即可清楚地了解为什么需要它initialCount以及为什么它可能与maximumCount.

    1. 案件initialCount == maximumCount。这是信号量的典型用途。这里有一个特定的“瓶颈”:您想要运行的最大线程数、某些服务允许的最大同时登录数等等。并且您不希望任何程序进程超过此最大值。您初始化一个信号量,它的两个计数器都等于该最大值。在入口处,他从计数器中减去,在出口处,他将其加回来。最重要的是,当当前信号量计数器达到零时,对函数的新调用将被阻止,等待计数器变得大于零。通过这种方式,您可以限制函数的最大条目数,并且某些实体的复制不会超过某个最大值。

    2. 案件initialCount < maximumCount。这几乎是相同的事情,但是您希望对进程有更多的控制,并且不希望立即达到最大进程数。一个极端的情况是initialCount = 0,在这种情况下,根本不会启动任何进程,所有进程都将被阻塞在信号量上。也许你想等待一些事情,之后你可以立即或逐渐增加计数器最大值和初始值之间的差异,然后信号量将像第一种情况一样起作用。例如,您想要逐渐增加负载,为此,您可以在一定延迟的情况下多次增加计数器。事实证明,第一个进程可以启动,然后是两个,依此类推,直到最大值。一般来说,当需要的时候你可以想出一些场景。

    • 2

相关问题

  • 使用嵌套类导出 xml 文件

  • 分层数据模板 [WPF]

  • 如何在 WPF 中为 ListView 手动创建列?

  • 在 2D 空间中,Collider 2D 挂在玩家身上,它对敌人的重量相同,我需要它这样当它们碰撞时,它们不会飞向不同的方向。统一

  • 如何在 c# 中使用 python 神经网络来创建语音合成?

  • 如何知道类中的方法是否属于接口?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5