MST

星途 面试题库

面试题:并发与同步:计数器在多线程同步中的应用场景

请描述在多线程编程环境下,计数器可以用于哪些常见的同步场景,并简要说明其原理。
13.0万 热度难度
操作系统并发与同步

知识考点

AI 面试

面试题答案

一键面试

常见同步场景及原理

  1. 控制并发访问数量
    • 场景:在服务器端,限制同时处理的请求数量。例如,一个小型Web服务器,为了避免因过多并发请求导致资源耗尽,限制同一时刻最多处理100个请求。
    • 原理:使用一个计数器,初始值设为最大允许的并发数(如100)。每当有一个新请求到来,线程尝试将计数器减1。如果计数器的值大于等于0,说明还有可用的并发名额,线程可以继续处理请求;如果计数器的值小于0,则线程需要等待,直到其他线程处理完请求并将计数器加1,使得计数器的值再次大于等于0。当线程处理完请求后,将计数器加1,释放一个并发名额。
  2. 线程协作与同步
    • 场景:多个线程共同完成一个任务,需要等待所有线程都执行到某个阶段后再继续下一步。比如,多个线程分别从不同数据源读取数据,然后需要将这些数据汇总处理。只有当所有线程都完成数据读取后,才能进行汇总操作。
    • 原理:使用一个计数器,初始值设为线程的数量。每个线程在完成自己的数据读取任务后,将计数器减1。当计数器的值变为0时,说明所有线程都完成了数据读取,此时可以触发汇总操作的线程开始执行。
  3. 资源分配与回收
    • 场景:管理共享资源池,如数据库连接池。池中有固定数量的数据库连接,线程需要获取连接来执行数据库操作,使用完后归还连接。
    • 原理:用计数器表示当前可用的连接数,初始值为连接池的大小。线程请求连接时,尝试将计数器减1,如果计数器大于等于0,则获取到连接;若小于0则等待。线程使用完连接归还时,将计数器加1,增加可用连接数。