C语言多线程编程:原理、实践与性能优化
1. 多线程概述
C程序常常需要同时执行多个任务,例如并行执行中间任务以提高性能,或者在“后台”进行耗时的数据通信或实时操作的同时处理用户输入。现代多处理器系统的普及使得程序利用并发特性来高效使用系统资源变得愈发重要。
过去,C开发者不得不依赖操作系统特性或特定库来实现并发执行。而新的C11标准让C编程中的并发具有了可移植性。C11支持多线程执行,即一个进程内有多个并行的控制流路径,并提供了与现代操作系统相同程度的并发能力。为此,C11定义了合适的内存模型并支持原子操作,但多线程和原子操作的支持在C11标准中是可选的。若实现不提供相应功能,需定义 __STDC_NO_THREADS__ 和 __STDC_NO_ATOMICS__ 宏。
2. 线程基础
当启动一个程序时,操作系统会创建一个新进程来执行该程序。一个进程由一个或多个线程组成,每个线程是一个部分进程,能独立于进程的其他部分执行一系列指令。进程开始时,其主线程处于活动状态,之后任何运行中的线程都可启动其他线程。当进程终止(如在 main() 函数中执行 return 语句或调用 exit() 函数)时,所有已启动但未结束的线程都会被终止。
系统调度器会将可用的CPU时间平均分配给所有可运行的线程。通常调度器是抢占式的,它会每隔短时间中断CPU正在执行的线程,并为CPU分配另一个线程。因此,即使在单处理器系统上,线程对用户来说也像是并行执行的,但真正的多线程同时执行只有在多处理器系统上才可能实现
超级会员免费看
订阅专栏 解锁全文
10万+

被折叠的 条评论
为什么被折叠?



