问题标签 [critical-section]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - InitializeCriticalSectionAndSpinCount,是否有默认的 Spin Count?
API 方法InitializeCriticalSectionAndSpinCount
允许您设置自旋计数,因此当EnterCriticalSection
被调用时,它会使用自旋锁循环尝试多次获取资源。只有当所有尝试都失败时,线程才会转换到内核模式以进入等待状态。
如果改为调用“正常” InitializeCriticalSection()
,是否设置了“默认”旋转计数?(或者是 0,没有旋转?)
multithreading - 为什么我的多线程应用程序在关闭时有时会挂起?
我在我的应用程序中使用了几个关键部分。临界区可防止不同线程同时修改和访问大型数据块。
AFAIK 一切正常,除了有时应用程序在退出时挂起。我想知道这是否与我使用关键部分有关。
有没有正确的方法来释放析构函数中的 TCriticalSection 对象?
感谢所有的答案。考虑到这些新信息,我正在再次查看我的代码。干杯!
c++ - WinAPI 定时互斥锁
如何在一段时间内锁定互斥锁(关键部分)?是否有任何API功能?据我所知,Windows 中没有类似的东西。如果是这样,是否可以手动实施?
谢谢。
c++ - Windows 关键部分奇怪的行为
我有两个共享的全局变量
和两个线程
该代码始终打印以下输出
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
9 9
8 8
7 7
6 6
5 5
4 4
3 3
2 2
1 1
0 0
这很奇怪,看起来线程是按顺序工作的。那有什么问题?
谢谢。
multithreading - 大量关键部分
环境:C++,VS 2008,MFC,Windows XP 应用程序。我必须在 2 个线程中访问和修改树结构。我的想法是使用 CCriticalSection 保护每个节点,每次访问节点内部数据(不是子节点)时都会锁定该节点。我期待大量节点(2-300000)。
大量的临界区会成为问题吗?
我听说 Windows 有大量打开句柄的问题,这就是我问这个的原因。
c# - 简单的线程问题,锁定非本地更改
好的,首先我必须在这个问题前加上免责声明,我对线程很陌生,所以这可能是一个“新手”问题,但我搜索了谷歌并找不到答案。据我了解,关键部分是可以由两个或多个线程访问的代码,一个线程的危险将在另一个线程完成之前覆盖一个值,反之亦然。您可以对课外所做的更改做些什么,例如,我有一个线路监控程序:
在另一个线程上,我有这样的事情:
现在我担心在第一个函数中我得到 currentNumber 5,紧接着在另一个线程上将数字设置为 7,然后将 7 重写为 6,忽略将其设置为 7 的线程所做的更改.
无论如何要锁定 provider.SetNumber 直到第一个函数完成?临界区基本上是 currentNumber,可以在程序中的许多地方更改。
我希望我说清楚了,如果不让我知道,我会尝试更好地解释自己。
编辑:我也让这个例子的功能真的很短。实际上,该函数要长得多,并且对 currentNumber 进行了多次更改,因此我真的不想锁定整个函数。如果我锁定对 provider.SetNumber 的每个调用并在完成后释放它,它可以在它被释放的时间内更改,然后我再次锁定它以调用 provider.SetNumber。老实说,我也担心由于性能和死锁而锁定整个功能。
c# - 简单的线程问题,锁定对共享资源或整个函数的访问?
这是对我之前的一个问题的解释。这是一个简单的线程问题,但我似乎无法理解。
如果我有共享代码:
我不能期望 'a' 最终等于 5,因为第一个线程获得了一个锁,将 'a' 设置为 2,然后下一个线程可以在第一个线程能够之前获得一个锁,将其设置为 '4'加 3,最后你会得到 7。
据我了解,解决方案是在整个事情上加一个锁,然后你总是可以期待 5 个。现在我的问题是,如果在两个锁之间有一百万行代码怎么办。我无法想象将一百万行代码放在一起。您将如何通过在大约一百万两行代码中加锁来确保线程安全,但又不会导致性能失败?
编辑:
这是我为这个问题编写的废话代码。实际应用是线路监控系统。有两个屏幕显示当前线路,一个用于文员,一个用于公众。职员的屏幕通过串行端口接受“点击”,串行端口逐行推进,然后通过通知事件更新公共屏幕(参见观察者设计模式)。问题是,如果您向答题器发送垃圾邮件,它们不会同步。我想发生的事情是第一个屏幕添加到行号,显示它然后更新公共屏幕,但是在公共屏幕有机会显示数据库中的行号之前,店员再次点击,数字消失了同步。上面的“a”代表我从数据库中检索的一个值,而不仅仅是一个简单的 int。
c++ - 线程或主程序中的关键部分更好?
我曾经在访问共享数据时使用临界区(在c ++中)来阻止theads的执行,但是为了工作,它们必须等到数据没有被使用后再阻塞,也许最好在主线程或线程中使用它们。然后,如果我希望我的主程序具有优先级并且不被阻塞,我必须使用其中的关键部分来阻塞其他线程还是相反?
c - 通过使用严格的更改来防止竞争条件
我在一本关于操作系统的书中找到了以下代码。这是一种称为“严格更改”的技术,旨在通过在进程进入关键区域时使用锁来防止进程之间的竞争条件。我了解比赛条件,但我不太了解这段代码。
旁边还有这段代码。
我认为第二个 while 循环的代码中可能存在拼写错误。如果没有,那么有人可以解释这段代码是如何工作的吗?书中的解释对我来说没有意义。它只在非常笼统、抽象的层面上才有意义。但是,当我查看此代码时,我就是不明白。
process - 我的解决方案是否满足互斥的要求
我写了 2 个进程以满足互斥,但不确定是否是 .. 我的初始标志值为 0。
事实上它们是完全一样的。这两个过程是否满足互斥?我看不到违反了什么要求..