• LeetCode 1114 按序打印


    给你一个类:

    public class Foo {
      public void first() { print("first"); }
      public void second() { print("second"); }
      public void third() { print("third"); }
    }
    三个不同的线程 A、B、C 将会共用一个 Foo 实例。

    线程 A 将会调用 first() 方法
    线程 B 将会调用 second() 方法
    线程 C 将会调用 third() 方法
    请设计修改程序,以确保 second() 方法在 first() 方法之后被执行,third() 方法在 second() 方法之后被执行。

    提示:

    尽管输入中的数字似乎暗示了顺序,但是我们并不保证线程在操作系统中的调度顺序。
    你看到的输入格式主要是为了确保测试的全面性。
     

    示例 1:

    输入:nums = [1,2,3]
    输出:"firstsecondthird"
    解释:
    有三个线程会被异步启动。输入 [1,2,3] 表示线程 A 将会调用 first() 方法,线程 B 将会调用 second() 方法,线程 C 将会调用 third() 方法。正确的输出是 "firstsecondthird"。

    示例 2:

    输入:nums = [1,3,2]
    输出:"firstsecondthird"
    解释:
    输入 [1,3,2] 表示线程 A 将会调用 first() 方法,线程 B 将会调用 third() 方法,线程 C 将会调用 second() 方法。正确的输出是 "firstsecondthird"。
     

    提示:
    nums 是 [1, 2, 3] 的一组排列

    解题思路:

    Lock锁对象

    按序打印 - 按序打印 - 力扣(LeetCode)

    Python代码:

    1. from threading import Lock
    2. class Foo:
    3. def __init__(self):
    4. self.l1 = Lock()
    5. self.l2 = Lock()
    6. self.l1.acquire()
    7. self.l2.acquire()
    8. def first(self, printFirst: 'Callable[[], None]') -> None:
    9. # printFirst() outputs "first". Do not change or remove this line.
    10. printFirst()
    11. self.l1.release()
    12. def second(self, printSecond: 'Callable[[], None]') -> None:
    13. self.l1.acquire()
    14. # printSecond() outputs "second". Do not change or remove this line.
    15. printSecond()
    16. self.l2.release()
    17. def third(self, printThird: 'Callable[[], None]') -> None:
    18. self.l2.acquire()
    19. # printThird() outputs "third". Do not change or remove this line.
    20. printThird()

  • 相关阅读:
    小红书热点是什么,怎么找到热点话题!
    从零开始自己动手写阻塞队列
    vue3.0 + qiankun遇到的问题
    现在考Oracle 19c OCP还需要官方的培训记录吗?
    R语言爬虫代码模版:技术原理与实践应用
    array详解
    数据挖掘可视化+机器学习初探
    网络安全(黑客)自学笔记
    Nivdia向量数据库图检索最新标杆——CAGRA
    使用正则表达式在中英文之间添加空格
  • 原文地址:https://blog.csdn.net/weixin_42295205/article/details/125418215