多线程编程:概念、问题与解决方案
1. 线程基础
1.1 线程管理与抢占式调度
在计算机系统中,线程的执行受到处理器数量的限制。操作系统会快速地在不同线程之间进行切换,为每个线程分配一小段执行时间,这种方式被称为抢占式线程调度。在这种模式下,操作系统可以在任何时刻暂停一个线程的执行,以便让另一个线程运行。与之相对的是协作式模式,该模式要求线程主动暂停自身执行,以让其他线程运行。线程的切换过程被称为上下文切换。
1.2 系统线程与用户线程
系统线程由操作系统创建和管理,应用程序的第一个(主)线程通常就是系统线程,当这个线程终止时,应用程序往往也会退出。而用户线程则是由应用程序显式创建的,用于执行那些主线程无法或不应该执行的任务。
对于带有用户界面的应用程序,主线程通常被称为事件线程,它负责等待并将事件(如鼠标点击、按键操作)传递给应用程序进行处理。一般来说,让事件线程长时间阻塞是不良的编程习惯,因为这可能导致应用程序无响应,甚至使计算机死机。为避免这些问题,应用程序会创建线程来处理耗时操作,特别是涉及网络访问的操作。
2. 线程同步:监视器与信号量
2.1 线程同步的必要性
为避免数据损坏和其他问题,应用程序必须控制线程与共享资源的交互方式,这就是线程同步。线程同步的两种基本构造是监视器和信号量,具体使用哪种取决于系统或编程语言的支持。
2.2 监视器
监视器是一组由互斥锁保护的例程。线程在获取锁之前,无法执行监视器中的任何例程,这意味着同一时间只有一个线程可以在监视器内执行,其他线程必须等待当前执行的线程释放锁。线程可以在
超级会员免费看
订阅专栏 解锁全文

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



