首先,记住这些'同步对象'的目标:
这些对象旨在提供高效和连贯使用' 多个线程在 1 个进程之间或来自不同进程的共享数据'。
这些对象可以是'获得'或'释放'。
就是这样!!!故事结束!!!
现在,如果对你有帮助,让我把我的一粒沙子:
1) 关键部分= 用户对象,用于允许仅执行一个活动线程来自许多其他在一个过程中。其他未选择的线程(@获取此对象)被置于睡眠。
[没有进程间能力,非常原始的对象]。
2) Mutex Semaphore(又名 Mutex)= 内核对象,用于仅允许执行许多其他线程的一个活动线程,在一个进程中或在不同进程中。其他未选择的线程(@获取此对象)被置于睡眠。该对象支持线程所有权、线程终止通知、递归(来自同一线程的多个“获取”调用)和“避免优先级反转”。
[进程间能力,使用非常安全,一种“高级”同步对象]。
3) 计数信号量(又名信号量)= 用于允许执行一组活动线程来自许多其他线程的内核对象, 在一个进程中或在不同进程中。其他未选择的线程(@获取此对象)被置于睡眠。
[进程间功能但使用起来不是很安全,因为它缺少以下“互斥”属性:线程终止通知、递归?、“避免优先级反转”?等]。
4) 现在,谈论“自旋锁”,首先是一些定义:
Critical Region= 由 2 个或更多进程共享的内存区域。
Lock= 一个变量,其值允许或拒绝进入“关键区域”。 (它可以实现为一个简单的“布尔标志”)。
忙于等待= 不断测试变量,直到出现某个值。
最后:
自旋锁(又名自旋锁)= 锁,它使用忙等待强>。 (锁的获取是通过xchg或类似的原子操作 em>)。
[无线程休眠,主要仅在内核级别使用。用户级代码效率低下]。
作为最后的评论,我不确定,但我可以和你打赌,上面的前 3 个同步对象(#1、#2 和 #3)利用这个简单的野兽(#4)作为他们的实施。
祝你有美好的一天!
参考资料:
-Real-Time Concepts for Embedded Systems by Qing Li 和 Caroline Yao(CMP 书籍)。
-Andrew Tanenbaum(培生国际教育)的现代操作系统(第 3 届)。
-Jeffrey Richter(Microsoft 编程系列)的 Microsoft Windows 编程应用程序(第 4 期)。