• 2022-06-07
    请根据本题要求完善任务Task1和任务Task2的程序代码,填补图中的空缺。
  • (1)OSSemPend(emptySemO&err)(2)Buffer=readc(3)ret=OSSemPost(fullSem)(4)OSSemPend(fullSemO&err)(5)ret=OSSemPost(emptySem)(6)Printc(wntec)(1)OSSemPend(emptySem,O,&err)(2)Buffer=readc(3)ret=OSSemPost(fullSem)(4)OSSemPend(fullSem,O,&err)(5)ret=OSSemPost(emptySem)(6)Printc(wntec)解析:本问题是信号量应用实例。μC/OS-II操作系统提供了操作信号量的若干系统调用,任务Task1为了实现从键盘读入一个字符并写到buffer的功能,就必须在读完字符后调用OSSemPend()和OSSemPost()对写buffer缓冲的动作加锁和解锁。Task2为了完成将该字符输出到屏幕,也必须在读buffer缓冲的动作时加锁和解锁。这样就避免任务Task1和Task2同时操作buffer缓冲的资源冲突。因此,任务Task1的代码如下:voidTask1(void*#pdata){INT8Ureadc;INT8Uerr;INT8Uret;while(1){readc=scanc();OSSemPend(emptySem,0,&err);Buffer=readc;ret=OSSemPost(fullSem);}}任务Task2的代码如下:voidTask2(void*#pdata){INT8Uwritec;INT8Uerr;INT8Uret;while(1){OSSemPend(fullSem,0,&err);writec=buffer;ret=OSSemPost(emptySem);Printc(writec);}}

    举一反三

    内容

    • 0

      DataIDE中,task1和task2都是按天调度的周期性调度任务,task1设置定时时间为02:00,task2设置定时时间为00:00,task2依赖属性的上游任务配置为task1,每天task2何时可以运行?() A: 只要task1执行成功,task2就马上运行 B: task1在2:00之后才执行成功,则task2不再运行 C: task1执行成功时,时间若已到2:00,则task2可以运行 D: task1执行成功时,时间没到2:00,则task2不再运行

    • 1

      数据工场DataWorks(原DataIDE)中,任务task1是按小时调度的周期性调度任务,任务配置为在00:00至23:59之间每1小时执行次,每次执行生成前一个小时的数据。任务task2是按天调度的周期性调度任务,每次执行都是处理task1最新生成的一整天的数据。为了保证task2每次运行前,task1最新的一整天的数据已经成功生成,task1和task2需要如何配置?() A: task1跨周期依赖选择自依赖,task2调度周期定时设置为零点整,task2依赖属性的上游任务配置为task1 B: task2调度周期定时设置为零点整,task2依赖瓜性的上游任务配置为task1 C: task2调度周期定时设置为23点59分,task2依赖属性的上游任务配置为task1 D: task2调度周期定时设置为零点整,task2跨周期依赖选择等待自定义任务的上一周期结束自定义任务是task1

    • 2

      假设有三个可运行任务,task1,task2,task3。如何在具有2个固定线程的线程池中运行它们? A: newThread(task1).start();newThread(task2).start();newThread(task3).start(); B: ExecutorServiceexecutor=Executors.newFixedThreadPool(3);executor.execute(task1);executor.execute(task2);executor.execute(task3); C: ExecutorServiceexecutor=Executors.newFixedThreadPool(2);executor.execute(task1);executor.execute(task2);executor.execute(task3); D: ExecutorServiceexecutor=Executors.newFixedThreadPool(1);executor.execute(task1);executor.execute(task2);executor.execute(task3);

    • 3

      DataIDE中,周期性调度任务的依赖属性配置决定了任务运行的先后顺序,任务task1、task2、task3都是按天调度的周期性任务,下列关于3个任务说法正确的有?() A: 若task1执行时需要用到task2当天生成的最新数据,那么task1依赖属性的上游任务应该配置task2 B: 若task2执行时需要用到task1当天生成的最新数据,task3每天需要用到task2当天生成的最新数据,那么task3依赖属性的上游任务应该直接配置task1 C: 若task2执行时需要用到task1当天生成的最新数据,task3每天需要用到task2当天生成的最新数据,那么task3依赖属性的上游任务必须直接配置task2和task1 D: 若task2执行时需要用到task1当天生成的最新数据,task3每天需要用到task2当天生成的最新数据,那么task3依赖属性的上游任务直接配置task2

    • 4

      数据工场DataWorks(原DatalDE)中,task1和task2者是按天调度的周期性调度任务,task1设置定时时间为02:00,task2设置定时时间为00:00,task2依赖属性的上游任务配置为task1,每天task2何时可以运行?() A: 只要task1执行成功,task2就可以开始运行 B: task1执行成功时,时间著已到2:00。则task2可以运行 C: task1在2:002后才执行成功,则ask2不再运行 D: task1执行成功时,时间没到200,则task2不再行