c++ - 关键部分在线程或主程序中更好?

标签 c++ critical-section

我过去常常使用临界区(在 C++ 中)来阻止访问共享数据时的 ads 执行,但就工作而言,它们必须等到数据未被使用后才能阻塞,也许最好在主线程或线程中使用它们。 那么,如果我希望我的主程序具有优先级而不被阻塞,我必须在其中使用关键部分来阻塞其他线程还是相反?

最佳答案

您似乎对什么是临界区以及它们如何工作有相当误解。

一般来说,关键部分 (CS) 是一段需要“独占”运行的代码——即,您需要确保在任何给定时间只有一个线程在执行该代码段。

正如在大多数环境中使用的术语,CS 实际上是一个互斥体——互斥信号量(也称为二进制信号量)。它是一种数据结构(和一组函数),用于确保一段代码得到独占执行(而不是引用代码本身)。

在任何情况下,只有当/如果您有一些代码将在多个线程中执行,并且您需要确保它在任何给定时间只在一个线程中执行时,CS 才有意义。这通常发生在您有一些共享数据时,如果有多个线程同时尝试操作这些数据,这些数据可能会损坏。当/如果出现这种情况,您需要为操作该数据的每个线程“使用”临界区,以确保共享数据未损坏。

确保特定线程保持响应是一个完全不同的问题。在大多数情况下,这意味着使用队列(一种可能性)允许线程快速将任务“移交”到其他线程,而争用最少(即,在处理数据期间不使用 CS, CS 只持续足够长的时间将数据结构放入队列,其他线程从那里进行处理。

关于c++ - 关键部分在线程或主程序中更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5030194/

相关文章:

c++ - 在 C 或 C++ 中获取系统语言

c++ - 关于 Vulkan 中的函数加载器

c++ - 在 Boost::Program_Options 中,如何设置 wstring 的默认值?

c++ - 多线程服务器中的EnterCriticalSection和大量共享数据

关键部分和关闭/销毁?

c++ - 通过 constexpr 的临界区

c++ - 是否可以设置 ScrollWindow 的颜色?

c++ - 当您声明 "pointer type"形式(函数)参数 "like an const array"时,const 是什么?

c++ - 如何避免在用户模式下抢占我的线程

java - Java中有原子方法的实现吗?