本文主要是介绍嵌入式高频面试题——第一章 进程与线程(下),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 1.2 并发,同步,异步,互斥,阻塞,非阻塞的理解?
- 1.2.1 什么是线程同步和互斥?⭐⭐⭐⭐⭐
- 1.2.2 线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗?⭐⭐⭐⭐
- 1.2.3 并发,同步,异步,互斥,阻塞,非阻塞的理解?⭐⭐⭐⭐⭐
- 1.3 孤儿进程、僵尸进程、守护进程的概念?
- 1.3.1 基本概念?⭐⭐⭐⭐⭐
- 1.3.2 如何创建守护进程?⭐⭐
- 1.3.3 正确处理僵尸进程的方法?⭐⭐⭐⭐
1.2 并发,同步,异步,互斥,阻塞,非阻塞的理解?
1.2.1 什么是线程同步和互斥?⭐⭐⭐⭐⭐
-
同步:多个线程在协作时,某个线程需要等待其他线程完成某个任务后才能继续执行。通常用于确保任务按照预期的顺序执行。
-
互斥:用于防止多个线程同时访问共享资源,导致数据竞争或冲突。通过互斥锁来保证同一时刻只有一个线程可以访问资源。
1.2.2 线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗?⭐⭐⭐⭐
-
线程同步与阻塞的关系:同步通常需要阻塞来等待某个条件的满足,因此同步操作常常导致线程阻塞。
-
同步一定阻塞吗?不一定。某些同步操作可以通过非阻塞机制来实现。
-
阻塞一定同步吗?不一定。阻塞是指线程因为某种原因无法继续执行,可能与同步无关(例如等待 I/O 完成)。
1.2.3 并发,同步,异步,互斥,阻塞,非阻塞的理解?⭐⭐⭐⭐⭐
- 并发:多个任务在同一时间段内交替执行。
- 同步:任务之间通过某种方式协调,确保按照特定的顺序执行。
- 异步:任务可以独立于其他任务执行,无需等待其他任务完成。
- 互斥:确保共享资源在任意时刻只被一个线程或进程访问。
- 阻塞:任务因为等待某个事件(如 I/O 操作)而暂停执行,直到事件发生。
- 非阻塞:任务可以立即执行,不需要等待其他事件。
1.3 孤儿进程、僵尸进程、守护进程的概念?
1.3.1 基本概念?⭐⭐⭐⭐⭐
-
孤儿进程:父进程先于子进程终止,子进程变为孤儿进程。孤儿进程会被
init
进程收养。 -
僵尸进程:子进程结束后,父进程没有调用
wait()
函数,导致子进程的进程表项没有被清除,成为僵尸进程。 -
守护进程:长时间运行在后台、不与终端直接交互的进程,通常用于执行系统服务。
1.3.2 如何创建守护进程?⭐⭐
- 创建守护进程的步骤包括:
- 调用
fork()
,使父进程终止,子进程继续运行。 - 使用
setsid()
创建新的会话并使子进程成为会话领导。 - 重设文件权限掩码、关闭文件描述符,进入守护进程状态。
- 调用
1.3.3 正确处理僵尸进程的方法?⭐⭐⭐⭐
- 处理僵尸进程的方法:
- 在父进程中调用
wait()
或waitpid()
来回收子进程的状态。 - 使用信号处理函数捕捉
SIGCHLD
信号,自动回收子进程。
- 在父进程中调用
这篇关于嵌入式高频面试题——第一章 进程与线程(下)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!