LeetCode(多线程)- 1279. 红绿灯路口

简介: LeetCode(多线程)- 1279. 红绿灯路口

题目链接:点击打开链接

题目大意:略。

解题思路:略。

相关企业


  • 亚马逊(Amazon)
  • 高盛集团(Goldman Sachs)
  • 苹果(Apple)
  • 微软(Microsoft)
  • 谷歌(Google)
  • 彭博(Bloomberg)
  • 阿里巴巴
  • 字节跳动

AC 代码


class TrafficLight {
    private Semaphore greenLight; // 红绿灯遥控器
    private boolean road1CanGo; // 表示道路1是绿灯
    private boolean road2CanGo; // 表示道路2是绿灯
    public TrafficLight() {
        this.greenLight = new Semaphore(1, true);
        this.road1CanGo = true;
        this.road2CanGo = false;
    }
    public void carArrived(
            int carId,           // ID of the car
            int roadId,          // ID of the road the car travels on. Can be 1 (road A) or 2 (road B)
            int direction,       // Direction of the car
            Runnable turnGreen,  // Use turnGreen.run() to turn light to green on current road
            Runnable crossCar    // Use crossCar.run() to make car cross the intersection
    ) {
        try {
            // 申请获取遥控器
            greenLight.acquire(); 
            // 如果当前车道已经是绿灯了,直接通过
            if ((roadId == 1 && road1CanGo) || (roadId == 2 && road2CanGo)) crossCar.run();
            else if (roadId == 1 && !road1CanGo) { // 否则,如果道路1不是绿灯,用遥控器变成绿灯
                turnGreen.run();
                road1CanGo = true;
                road2CanGo = false;
                crossCar.run();
            } else if (roadId == 2 && !road2CanGo) { // 如果道路2不是绿灯,用遥控器变成绿灯
                turnGreen.run();
                road2CanGo = true;
                road1CanGo = false;
                crossCar.run();
            }
            // 最后把遥控器归还
            greenLight.release();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
目录
相关文章
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
268 3
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
Leetcode之多线程编程题
现有函数 printNumber 可以用一个整数参数调用,并输出该整数到控制台。 例如,调用 printNumber(7) 将会输出 7 到控制台。 给你类 ZeroEvenOdd 的一个实例,该类中有三个函数:zero、even 和 odd 。ZeroEvenOdd 的相同实例将会传递给三个不同线程:
256 1
|
数据采集
LeetCode(多线程)- 1242. 多线程网页爬虫
LeetCode(多线程)- 1242. 多线程网页爬虫
363 0
|
调度
leetcode.1114-按序打印-多线程案例
leetcode.1114-按序打印-多线程案例
188 0
leetcode线程题1116——打印零与奇偶数
leetcode线程题1116——打印零与奇偶数
162 0
leetcode线程题1117——H2O 生成(两个氢原子结合一个氧原子)
leetcode线程题1117——H2O 生成(两个氢原子结合一个氧原子)
284 0
|
调度
leetcode 线程题 1114. 按序打印
leetcode 线程题 1114. 按序打印
112 0
LeetCode(多线程)- 题集
LeetCode(多线程)- 题集
179 0
LeetCode(多线程)- 题集
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
254 6
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
167 6

热门文章

最新文章