每日十题八股-2025年1月15日

1.进程间通讯有哪些方式?
2.管道有几种方式?
3.信号和信号量有什么区别?
4.共享内存怎么实现的?
5.线程间通讯有什么方式?
6.除了互斥锁你还知道什么锁?分别应用于什么场景?
7.进程调度算法有哪些?
8.为什么并发执行线程要加锁?
9.自旋锁是什么?应用在哪些场景?
10.死锁发生条件是什么?

1.进程间通讯有哪些方式?

管道,匿名管道,命名管道(匿名只能在父子进程中使用。)单向的。
消息队列:消息队列实际上是保存在内核的「消息链表」。
共享内存:直接开辟一块内存供所有进程使用,这里注意竞争和同步的问题。
信号:信号是异步通信机制,是进程和内核进行沟通的方式。
socket:要与不同主机的进程间通信,那么就需要 Socket 通信了。

说实话,我不是很看得懂。

2.管道有几种方式?

管道在Linux中有两种方式:匿名管道和命名管道。
匿名管道:一种在父子进程或者兄弟进程之间进行通信的机制。
命名管道:是一种允许无关的进程间进行通信的机制。

3.信号和信号量有什么区别?

一个是一种类似于程序的已经实现的通讯方式。
信号量是指 机制,主要用于协调并发进程对共享资源的访问。

记忆:带有量这个字就是用PV操作处理信号量的。

4.共享内存怎么实现的?

共享内存的机制,每个进程就是拿出一块虚拟地址空间来,映射到相同的物理内存中。

5.线程间通讯有什么方式?

到目前为止,我也还是不明白为啥这些锁啊之类的会被成为通讯方式,我认为的通讯方式是你发消息,我能知道。而不是这些协调并发线程的东西。
Linux系统提供了五种用于线程通信的方式:互斥锁、读写锁、条件变量、自旋锁和信号量。

6.除了互斥锁你还知道什么锁?分别应用于什么场景?

在这里插入图片描述

7.进程调度算法有哪些?

在这里插入图片描述

8.为什么并发执行线程要加锁?

并发执行线程需要加锁的原因是确保共享资源的安全访问,避免多个线程同时修改共享数据导致的数据竞争(race condition)和不一致性问题。 加锁可以确保同一时刻只有一个线程能够访问共享资源,避免不必要的冲突。

例如有一个银行账户类,其中有一个共享的余额变量。两个线程同时执行存款操作,可能导致账户余额更新的不一致。

9.自旋锁是什么?应用在哪些场景?

自旋锁(Spinlock) 是一种常用的同步机制 ,它通过让线程在获取锁失败时不停地“自旋”(即不断地检查锁是否释放)来等待锁,而不是将自己挂起。
自旋锁的基本思想是,当一个线程无法获得锁时,它会不断地尝试获取锁,而不是进入阻塞状态等待,直到成功获取锁为止。

短时间锁定的临界区:如果锁的持有时间非常短,自旋锁会比传统的互斥锁更高效,因为不需要频繁地进行上下文切换。
锁竞争较少的场景:如果多个线程对同一资源的竞争较少,使用自旋锁会更高效,线程不需要进行调度和阻塞,只需简单地轮询。

10.死锁发生条件是什么?

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值