Ent*_*ize 0 c++ critical-section
我使用临界区(在c ++中)来阻止访问共享数据时的执行,但是为了工作它们必须等到阻塞之前没有使用数据,也许最好在main或thread中使用它们.然后,如果我希望我的主程序具有优先权而不被阻止,我必须使用其中的关键部分来阻止其他线程或相反吗?
您似乎对关键部分及其工作方式存在误解.
一般来说,关键部分(CS)是需要"专门"运行的一段代码 - 即,您需要确保在任何给定时间只有一个线程正在执行该段代码.
由于该术语在大多数环境中使用,CS实际上是互斥体 - 互斥信号量(又称二进制信号量).它是一个数据结构(和一组函数),用于确保一段代码专门执行(而不是引用代码本身).
在任何情况下,CS只有在/如果你有一些代码可以在多个线程中执行时才有意义,并且你需要确保它只在任何给定时间在一个线程中执行.这通常是当您有一些共享数据时,如果多个线程试图同时操作它,那么这些数据可能会被破坏.当/如果出现这种情况时,您需要为每个操作该数据的线程"使用"关键部分,以确保共享数据不被破坏.
确保特定线程保持响应是一个完全独立的问题.在大多数情况下,这意味着使用队列(一种可能性)允许线程快速"切换"任务到其他线程,争用最少(即,在处理数据的过程中不使用CS, CS仅持续足够长的时间将数据结构放入队列,而其他一些线程从那里开始处理.