11得票1回答
彼得森的解决方案在现代CPU架构上能正常工作吗?

我正在学习 Silberschatz, Galvin 和 Gagne 的 操作系统概念,涉及操作系统。在第229页上,书中关于Peterson's Solution的内容如下: 由于现代计算机体系结构执行基本的机器语言指令(例如加载和存储)的方式,无法保证 Peterson's soluti...

10得票2回答
如何使用Boost创建一个关键区域?

为了我的跨平台应用程序,我已经开始使用Boost,但是我不知道如何实现代码来复制Win32的关键部分或.Net的lock的行为。 我想编写一个名为Foo的方法,可以从不同的线程调用以控制对共享字段的写操作。允许在同一线程中进行递归调用(Foo() -> Foo())。 在C#中,这个...

10得票5回答
整数读取需要进行临界区保护吗?

我遇到一些采用如下形式的C++03代码:struct Foo { int a; int b; CRITICAL_SECTION cs; } // DoFoo::Foo foo_; void DoFoo::Foolish() { if( foo_.a == 4...

10得票2回答
Boost的scoped mutex和WinAPI的critical section有什么区别?

在Windows环境下,Boost的作用域互斥锁使用WinAPI的临界段(critical sections)吗?还是其他什么东西?

10得票3回答
为什么在Laravel 7中Cache::lock()返回false?

我的框架是Laravel 7,缓存驱动程序是Memcached。我想执行原子缓存的获取/编辑/放置操作。为此,我使用了Cache::lock(),但似乎不起作用。$lock->get()返回false(见下文)。我该如何解决这个问题? 为了测试,我重新加载了Homestead,并只运行了下面...

10得票3回答
如何在C#中使用多个变量作为锁范围

我是一名有帮助的助手,能够进行文本翻译。 我有一个情况,当两个锁对象都是空闲状态时,应该执行一段代码块。 我曾经希望会有这样的做法: lock(a,b) { // this scope is in critical region } 然而,似乎没有这样的东西。那么这是否意味...

9得票5回答
Delphi:通过报告正在运行的线程的调用堆栈来调试关键部分挂起问题,以便在锁定“失败”时进行排查。

我正在寻找一种方法来调试一个罕见的Delphi 7关键段(TCriticalSection)挂起/死锁。在这种情况下,如果一个线程等待超过10秒钟的关键段,我希望产生一份报告,其中包含当前锁定关键段的线程和无法在等待10秒后锁定关键段的线程的堆栈跟踪。如果引发异常或应用程序终止,则可以接受。 ...

9得票2回答
JavaScript或jQuery中的关键区段

我有一个网页,在其中异步触发某个特定的Ajax事件。这个Ajax部分可以被调用一次或多次。我无法控制此事件被触发的次数和时机。 另外,在该Ajax部分中有一些代码应该作为关键部分运行,这意味着当它在运行时,不应该有其他副本的该代码正在运行。 以下是伪代码: 运行JavaScript或j...

9得票3回答
禁用硬件和软件中断。

是否可能使用ASM/C/C++程序禁用所有中断以完全控制处理器? 如果是 -> 如何实现? 如果不是 -> "原子"操作系统调用如何工作(例如进入临界区)? 感谢您的帮助!

9得票2回答
Windows中互斥锁、临界区等的成本

我在某处读到,mutex的开销并不大,因为只有在竞争情况下才会发生上下文切换。 在Linux中也称作Futexes。 在Windows中是否也适用相同的情况?在Linux中,关键段(Critical Section)是否更适合作为互斥锁? 据我所知,与Mutex相比,关键段提供更优秀的性...