回答
在Windows临界区(大部分)是在用户模式下实现的,而互斥量会将上下文切换到内核模式(这很慢)。如果一个线程在拥有一个互斥体时终止,那么互斥体就被认为是被放弃了。互斥状态设置为发信号,下一个等待线程获得所有权。在临界区域的情况下,所有其他线程将保持阻塞状态。关键部分无法命名,因此您无法使用它们来同步多个进程。
“关键部分完全在用户模式下实现”< - 并非完全如此。如果他们有足够的时间旋转,关键部分会产生而不是旋转。 – 2011-03-01 18:11:37
CriticalSections意思是过程。被称为互斥锁可以跨进程使用
锁是一个通用术语,因此我不知道你的意思是哪个平台。例如在C#中,一个锁原语是一个关键部分。
并且锁也处于正确的状态? – ckv 2010-05-11 07:02:28
1)临界区是用户和联锁操作之间的桥梁。它使用inetrlocked交换的操作来锁定和解锁你的线程。它的工作速度比互斥锁快。
2)互斥锁是一个内核对象。它工作不快,但有一些优点。首先,可以跨进程使用已命名的互斥锁。其次,如果线程被终止,那么由该线程锁定的互斥锁被解锁。
关键部分不是内核对象。他们没有与任何句柄标识。它们只能用于同步属于同一进程的线程。它们不能在整个过程中用于同步。
CSingleLock(我假设你是指这是一个锁,在这种情况下)是一个使用RAII概念的包装类。它可以帮助您获取线程同步对象(在其构造函数中),并以简单的方式调用锁定和解锁API。 (隐藏它使用的同步对象的所有内部细节)。
CSingleLock与Critical部分一起使用时,不能跨进程使用。互斥体可以用于此目的。
当线程获取互斥锁并且没有其他线程可以获取互斥锁时,则说互斥锁的状态处于非锁定状态。 如果互斥锁可用且没有线程获取,则它处于Signeled状态。
- 1. C++中互斥锁和临界区之间的性能差异
- 2. 互斥锁与pthread_join之间的区别
- 3. C++部分互斥/临界区段锁
- 4. 互斥体和临界区之间的边界是什么?
- 5. GCD临界区/互斥
- 6. 锁定和互锁之间的区别
- 7. Windows上的互斥锁,临界区等的代价
- 8. 线程同步 - 临界区或互斥锁?
- 9. 互斥和同步的区别?
- 10. 比赛和死锁之间的区别
- 11. 监视器和锁之间的区别?
- 12. 我可以使用互锁操作更新多个值以避免锁定临界区/互斥量吗?
- 13. 互斥锁和锁
- 14. 临时表之间的区别
- 15. 共享互斥和互斥之间的区别(为什么都存在于C++ 11并发中)?
- 16. SQL临时数据库,临时表和表之间的区别
- 17. 互斥和条件变量之间的决定性区别是什么?
- 18. 棘手联锁减值与临界区
- 19. 之间的〜/和的区别../
- 20. 临界区
- 21. 嵌套锁和简单锁之间的区别
- 22. 锁定(this)和静态对象锁定之间的区别
- 23. pthread_getspecific和互斥锁
- 24. 类区域和堆之间的区别
- 25. '#','%'和'$'之间的区别
- 26. {!!之间的区别!!}和{{}}
- 27. '+ ='和'= +'之间的区别?
- 28. “。+”和“。+?”之间的区别
- 29. .eq之间的区别。和==
- 30. #。/和#之间的区别。 ./
他们对我来说是一样的,我的猜测是你正在使用一个库,这使得三者之间有所不同(Win32?)。 – 2010-05-11 06:56:39
你是说像CSingleLock这样的锁在线程跨进程时也支持线程同步。我认为只有Mutex支持。如果我错了,请纠正我的错误 – ckv 2010-05-11 06:59:43