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

Posted 程序员牧码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(多线程)- 1279. 红绿灯路口的主要内容,如果未能解决你的问题,请参考以下文章

python多线程Event实现红绿灯案例

多线程中的event,用于多线程的协调

java多线程模拟红绿灯案例

第54天:Python 多线程 Event

第54天:Python 多线程 Event

Python学习笔记——进阶篇第八周———Socket编程进阶&多线程多进程