16、多线程编程:概念、问题与解决方案

多线程编程:概念、问题与解决方案

1. 线程基础

1.1 线程管理与抢占式调度

在计算机系统中,线程的执行受到处理器数量的限制。操作系统会快速地在不同线程之间进行切换,为每个线程分配一小段执行时间,这种方式被称为抢占式线程调度。在这种模式下,操作系统可以在任何时刻暂停一个线程的执行,以便让另一个线程运行。与之相对的是协作式模式,该模式要求线程主动暂停自身执行,以让其他线程运行。线程的切换过程被称为上下文切换。

1.2 系统线程与用户线程

系统线程由操作系统创建和管理,应用程序的第一个(主)线程通常就是系统线程,当这个线程终止时,应用程序往往也会退出。而用户线程则是由应用程序显式创建的,用于执行那些主线程无法或不应该执行的任务。

对于带有用户界面的应用程序,主线程通常被称为事件线程,它负责等待并将事件(如鼠标点击、按键操作)传递给应用程序进行处理。一般来说,让事件线程长时间阻塞是不良的编程习惯,因为这可能导致应用程序无响应,甚至使计算机死机。为避免这些问题,应用程序会创建线程来处理耗时操作,特别是涉及网络访问的操作。

2. 线程同步:监视器与信号量

2.1 线程同步的必要性

为避免数据损坏和其他问题,应用程序必须控制线程与共享资源的交互方式,这就是线程同步。线程同步的两种基本构造是监视器和信号量,具体使用哪种取决于系统或编程语言的支持。

2.2 监视器

监视器是一组由互斥锁保护的例程。线程在获取锁之前,无法执行监视器中的任何例程,这意味着同一时间只有一个线程可以在监视器内执行,其他线程必须等待当前执行的线程释放锁。线程可以在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值