什么是线程中的关键部分

Raj*_*war 8 c++ multithreading thread-safety critical-section

我正在阅读有关互斥,信号量和关键部分的内容.我理解mutex同步一个资源,这样只有一个线程在一个信号量允许特定的线程没有线程访问资源时访问它,但关键部分做了什么?

Jer*_*fin 15

在正常使用中,临界区是必须连续执行的代码段 - 即,在任何给定时间只有一个线程可以执行该代码.您通常通过使用互斥信号量保护代码来实现此目的.

在Windows用语中,关键部分是在特定于进程的互斥信号量(即,仅用于在单个进程中的线程之间进行锁定而不是在单独进程之间进行锁定的数据结构)的数据结构(以及一些相关联的函数).

信号量有两种.互斥信号量一次只允许一个线程执行.计算的信号量允许您指定可以同时执行的最大线程数.互斥信号量是更常见的变种,但计数的信号量肯定也有用途.

  • 不,两者并不完全相同。锁定的互斥体只能由先前锁定它的人解锁。任何人都可以解锁锁定的二进制信号量。 (2认同)