假设我有一个共享对象,其中有一段代码受关键部分保护,并且有多个线程正在访问该对象以进行读取/写入。当线程在临界区内时,其他线程正在等待。线程一旦离开CS,操作系统就可以访问任何等待的线程。使用互斥锁守护关键部分
如果我仅限于一个进程,那么CS本身是否能够很好地保护共享对象?
我问,因为我已经看到了网络,正确的方式做它是使用一个内核对象(例如:互斥,semaphone)看守CS。希望使用共享资源的线程需要首先使用WaitForSingleObject类型的函数获取互斥/信号量。如果使用互斥锁,那么只有一个可以访问资源。一旦获得互斥体,线程进入CS,完成应该做的事情,然后离开CS并释放互斥体。然后操作系统允许任何其他等待线程获取互斥锁等等。
但是是不是只使用CS相同?
此外,使用互斥锁应该比单独使用CS慢得多。我看到的仅使用CS的唯一问题是,如果线程在CS内部崩溃,那么其他线程可能永远不会访问共享资源。
有没有其他理由为什么这种方法更好? 在此先感谢
是否应该将其移至[计算机科学](http://cs.stackexchange.com/)? – Greg 2012-08-16 20:21:37
我从来没有见过任何代码能够完成您所说的所见过的任何代码。你可以指向一些获得互斥锁或sempahore的代码,然后获得具有相同范围的关键部分吗?我怀疑你可能会误解或误解那些代码,这就是你混淆的根源。 (也可能你混淆了术语“临界区”的两种不同用法,一种意思是特定的同步原语,另一种意思是代码区域受类似互斥体同步保护的代码区域) – 2012-08-16 20:24:08
谢谢大卫,我的意思是CSection窗口结构(InitializeCS,EnterCS,LeaveCS,DeleteCS)。难道是我误解了我读的东西? – user1599391 2012-08-16 20:57:33