假设我有一个共享对象,它的一段代码受临界区保护,并且有多个线程正在访问该对象以进行读/写。当一个线程在临界区内时,其他线程正在等待。一旦线程离开 CS,操作系统就会允许访问任何等待的线程。
如果我仅限于一个进程,那么单独使用 CS 是否可以很好地保护共享对象?
我问是因为我在网上看到正确的方法是使用内核对象(例如:互斥锁、信号机)来保护 CS。希望使用共享资源的线程需要首先使用 WaitForSingleObject 类型的函数获取互斥体/信号量。如果使用互斥体,则只有其中一个可以访问资源。一旦获得互斥锁,线程就会进入 CS,做应该做的事情,然后离开 CS 并释放互斥锁。然后操作系统允许任何其他等待线程获取互斥锁等等。
但是不就和只使用 CS 一样吗?
此外,使用互斥锁应该比单独使用 CS 慢得多。我看到的仅使用 CS 的唯一问题是,如果线程在 CS 内崩溃,那么其他线程可能永远不会访问共享资源。
还有什么其他原因可以说明这种方法更好吗?提前致谢