gpt4 book ai didi

multithreading - 互斥锁、信号量和自旋锁之间的区别

转载 作者:行者123 更新时间:2023-12-03 11:33:06 25 4
gpt4 key购买 nike

我正在用 IPC 做实验,尤其是 Mutex、Semaphore 和 Spin Lock。
我学到的是 Mutex 用于异步锁定(带 sleep (根据我在 NET 上读到的理论))机制,信号量是同步锁定(带信号和 sleep )机制,而自旋锁是同步但非 sleep 机制。

Can anyone help me to clarify these stuff deeply? And another doubt is about Mutex, when I wrote program with thread & mutex, while one thread is running another thread is not in Sleep state but it continuously tries to acquire the Lock. So Mutex is sleeping or Non-sleeping???

最佳答案

首先,记住这些的目标“同步对象” :

这些对象旨在提供 高效 相干使用 '共享数据' 之间 超过 1 个线程 1 个进程之间或来自不同进程。

这些对象可以是 “获得” '发布' .

这就对了!!!故事结局!!!

现在,如果它对你有帮助,让我放上我的一粒沙子:

1) 临界区 = 用于允许仅执行 的用户对象一个事件线程 来自许多其他人 一个进程内 .其他未选择的线程(@获取此对象)被放入 sleep .

[没有进程间能力,非常原始的对象]。

2)互斥信号量(又名互斥) = 用于允许仅执行 的内核对象一个事件线程 来自许多其他人,一个进程内不同进程之间 .其他未选择的线程(@获取此对象)被放入 sleep .该对象支持线程所有权、线程终止通知、递归(来自同一线程的多个“获取”调用)和“优先级反转避免”。

[进程间能力,使用非常安全,一种'高级'同步对象]。

3) 计数信号量(又名信号量) = 用于允许执行 的内核对象一组事件线程来自许多其他人,一个进程内不同进程之间 .其他未选择的线程(@获取此对象)被放入 sleep .

[但是使用进程间能力不是很安全,因为它缺少以下“互斥”属性:线程终止通知、递归?、“优先级反转避免”?等]。

4) 现在,谈论“自旋锁”,首先是一些定义:

临界区 = 由 2 个或多个进程共享的内存区域。

Lock= 一个变量,其值允许或拒绝进入“临界区”。 (它可以实现为一个简单的“ bool 标志”)。

忙等待 = 不断测试变量直到出现某个值。

最后:

自旋锁(又名自旋锁) = A 使用 忙等待 . (获取 xchg 或类似 原子操作 完成)。

[没有线程休眠,主要仅用于内核级别。对用户级代码效率低下]。

作为最后一条评论,我不确定,但我可以向您打赌,上面的前 3 个同步对象(#1、#2 和 #3)利用这个简单的野兽(#4)作为其实现的一部分。

祝你有美好的一天!。

引用文献:

-Qing Li 和 Caroline Yao 的嵌入式系统实时概念(CMP Books)。

- Andrew Tanenbaum(培生教育国际)的现代操作系统(第三名)。

-Jeffrey Richter 的 Microsoft Windows 编程应用程序(第 4 期)(Microsoft 编程系列)。

关于multithreading - 互斥锁、信号量和自旋锁之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23511058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com