Leetcode 1114:按序打印

it2022-05-05  154

题目描述

我们提供了一个类:

public class Foo {   public void one() { print("one"); }   public void two() { print("two"); }   public void three() { print("three"); } } 三个不同的线程将会共用一个 Foo 实例。

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

 

示例 1:

输入: [1,2,3] 输出: "onetwothree" 解释:  有三个线程会被异步启动。 输入 [1,2,3] 表示线程 A 将会调用 one() 方法,线程 B 将会调用 two() 方法,线程 C 将会调用 three() 方法。 正确的输出是 "onetwothree"。 示例 2:

输入: [1,3,2] 输出: "onetwothree" 解释:  输入 [1,3,2] 表示线程 A 将会调用 one() 方法,线程 B 将会调用 three() 方法,线程 C 将会调用 two() 方法。 正确的输出是 "onetwothree"。  

注意:

尽管输入中的数字似乎暗示了顺序,但是我们并不保证线程在操作系统中的调度顺序。

你看到的输入格式主要是为了确保测试的全面性。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/print-in-order 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

 

解题思路

#include<semaphore.h> class Foo { public: sem_t bin_sem1,bin_sem2; Foo() { sem_init(&bin_sem1,0,1); sem_init(&bin_sem2,0,1); sem_wait(&bin_sem1); sem_wait(&bin_sem2); } void first(function<void()> printFirst) { printFirst(); sem_post(&bin_sem1); } void second(function<void()> printSecond) { sem_wait(&bin_sem1); printSecond(); sem_post(&bin_sem2); } void third(function<void()> printThird) { sem_wait(&bin_sem2); printThird(); } };

最新回复(0)