9得票4回答
在 Mutex 示例中出现未处理的异常 / 访问违规写入位置

我正在解决一个使用互斥锁保护全局双精度变量的示例,但是我遇到了错误 - 未处理的异常0x77b6308e在Lab7.exe中: 写入位置0x00000068的访问冲突0xC0000005。 我猜这与访问分数有关?(全局双精度变量) #include <windows.h> ...

9得票10回答
仅使用临界区的Win32读/写锁

我需要在工作项目中使用Win32 API实现C++读/写锁。所有现有的解决方案都使用内核对象(信号量和互斥体),这些对象在执行期间需要进行上下文切换,速度太慢了。 如果可能的话,我想使用临界区来实现它。该锁不必是进程安全的,只需要是线程安全的。你有什么关于如何实现的想法吗?

8得票1回答
为什么std::mutex的速度比CRITICAL_SECTION慢两倍

std::mutex使用临界区实现,因此它比OS Mutex(在Windows上)要快得多。但是它不如Windows CRITICAL_SECTION快。 在单个线程中进行紧密循环的时间: 423.76ns ATL CMutex 41.74ns std::mutex 16.61ns w...

8得票1回答
理解TCriticalSection和Synchronize

我希望在这里确认我是否正确理解了TCriticalSection和Synchronize的操作方式。 据我所知,Synchronize使用SendMessage(更新:或者至少在旧版本的VCL中使用它,如下面的几条评论所述),它会暂停当前正在执行的线程(以及任何其他线程),而不像PostMe...

8得票2回答
在什么情况下,Windows临界区可能具有负的锁定计数?

在Windows的RTL_CRITICAL_SECTION结构中,LockCount字段在什么情况下可以合法地为负数? 我们正在追踪一个非常难以捉摸的崩溃,并且发现CS的一个症状是LockCount为负数。在崩溃时,计数为-6,但通常会是-1、-2等。 在假定这种情况是非常糟糕的事情之前,...

8得票1回答
使用“不安全”的线程函数是否安全?

请原谅我有点幽默的标题。在标题中,我使用了“safe”一词的两个不同定义(显然)。 我对线程编程比较陌生(虽然我多年来一直在使用线程,但只是非常简单的形式)。现在我面临一个挑战,需要编写一些算法的并行实现,并且这些线程需要处理相同的数据。考虑以下新手常见错误: const N = 2;...

8得票5回答
多线程。在只读访问中是否需要临界区?

我有一堆线程。它们应该访问一个包含配置数据的单例,在创建单例时只初始化一次。因此,在第一次访问时进行初始化。因此,对单例的进一步操作只是只读的。在这种情况下,我需要关键部分吗?

8得票1回答
一个被两个线程访问的共享队列的关键代码部分是什么?

假设我们有一个共享队列(使用数组实现),其中两个线程可以访问,一个用于从中读取数据,另一个用于向其中写入数据。现在,我有一个同步问题。我正在使用 Win32 API(EnterCriticalSection 等)来实现这个问题。 但是我的好奇心是,在队列的入队和出队操作中,临界区代码将是什么...

8得票2回答
为什么CRITICAL_SECTION的OwningThread成员是HANDLE类型,而不是表示线程ID的类型?

我正在尝试为CRITICAL_SECTION解锁代码添加一些调试检查,我尝试了以下方法: ... if (m_pCritSect) { ASSERT(m_pCritSect->OwningThread == GetCurrentThreadId()); LeaveC...

7得票3回答
什么是关键区?

希望在此方面得到一些澄清。 想象一下我使用Windows API的 EnterCriticalSection。我使用 EnterCriticalSection(&criticalsection); 来调用它们。 这是一个多线程的线程函数。 void thread (){ //ent...