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

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

23得票7回答
关键区段总是更快吗?

我正在调试一个多线程应用程序,并发现了 CRITICAL_SECTION 的内部结构。我觉得 CRITICAL_SECTION 数据成员 LockSemaphore 很有趣。 它看起来像是一个自动重置事件(尽管名称中暗示了它是一个信号量),当第一次有一个线程等待被其他线程锁定的 Critic...

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

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

7得票1回答
InitializeCriticalSectionAndSpinCount,是否有默认的自旋计数?

API方法InitializeCriticalSectionAndSpinCount允许您设置自旋计数器,因此当调用EnterCriticalSection时,它使用自旋锁循环尝试多次获取资源。只有在所有尝试失败后,线程才转换到内核模式进入等待状态。 如果调用“正常”的InitializeC...

127得票8回答
OpenMP中的atomic和critical有什么区别?

OpenMP中atomic和critical的区别是什么? 我能做到。#pragma omp atomic g_qCount++; 这不就跟#pragma omp critical g_qCount++; ?

38得票5回答
我需要在读取对象时进行锁定吗?

我正在编写一个程序,其中有一个对象被多个线程共享: A)多个写线程向对象中写入数据(所有线程都运行相同的功能) B)一个读取线程每 5 秒钟访问该对象 C)一个读取线程在有用户请求时访问该对象 很显然,在向对象中写入内容时需要对其进行锁定,因为我们不希望多个线程同时写入该对象。 我的...

13得票3回答
C#数组的线程安全性

拥有两个不同的线程: 一个从C#数组中读取(例如,从第一个位置开始) 另一个将数据写入到相同的C#数组但是写入到不同的位置(例如,写入到最后一个位置) 这种情况下是否线程安全? (我指的是在没有锁定读取或写入的情况下)

11得票2回答
ARM中的临界区

我有在AVR处理器家族上实现关键段的经验,在这种情况下,您只需要禁用中断(当然要使用内存屏障),执行关键操作,然后重新启用中断:void my_critical_function() { cli(); //Disable interrupts // Mission critica...

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

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

16得票5回答
在关键部分中使用pthread_cond_signal()

我在A线程中有如下代码片段,它使用pthread_cond_wait()进行阻塞。pthread_mutex_lock(&my_lock); if ( false == testCondition ) pthread_cond_wait(&my...