目录

零、写在前面

一、主要知识点

1.打印指定的形状的边界判定

2.信号量

二、课后习题

1115. 交替打印FooBar

写在最后


零、写在前面

这个系列不经常更新,今天这个题目因为英雄哥玩超纲课后题0.0,我们一起看一看,主要知识点在

【第16题】给定 n,打印一个直角边为 n 的等边直角三角形https://blog.csdn.net/WhereIsHeroFrom/article/details/118272189https://blog.csdn.net/WhereIsHeroFrom/article/details/118272189


一、主要知识点

        1.打印指定的形状的边界判定

#include<stdio.h>
int main() {int n, i, j;while(scanf("%d", &n) != EOF) {for(i = 1; i <= n; ++i) {       // 打印指定行数for(j = 1; j <= i; ++j)     // 打印数量与行数相同printf("*");            // 打印字符printf("\n");               // 换行}}return 0;
}

        2.信号量

首先我们了解下进程互斥需要遵循的四个原则。

1.空闲让进 2.忙则等待 3.有限等待 4.让权等待

其中空闲让进、忙则等待保证了进程的互斥访问。有限等待保证了程序的可执行性质。

让权等待指的是在等待的时候主动休眠放弃cpu的使用权力。

而最常用保证上面的这些的一个机制就是信号量,c语言里面有几个常用的函数帮助我们来实现这些操作。

    sem_t bar;//创建信号量变量sem_init(&(obj->foo),0,1);//初始化 其中第一个参数为信号量地址 第二个是共享范围 0表示在所有进程共享 第三个是初始值 一开始拥有的个数sem_wait(&(obj->foo)); //申请信号量 如果能申请到 就减小信号量的个数 往下执行 否则主动睡眠sem_post(&(obj->bar)); //释放信号量,给相应的信号量+1,并唤醒相应的进程

二、课后习题

1115. 交替打印FooBar

1115. 交替打印FooBarhttps://leetcode-cn.com/problems/print-foobar-alternately/

题目描述

两个不同的线程将会共用一个 FooBar 实例。其中一个线程将会调用 foo() 方法,另一个线程将会调用 bar() 方法。

请设计修改程序,以确保 "foobar" 被输出 n 次。

思路

明显的进程同步问题,也就是foo执行一次 far执行一次。一开始就写了一个不遵循让权等待的简单同步模型,你们应该可以看懂-.-

typedef struct {int n;int x;    //同步用变量
} FooBar;FooBar* fooBarCreate(int n) {FooBar* obj = (FooBar*) malloc(sizeof(FooBar));obj->n = n;obj->x = 0;//初始化return obj;
}void foo(FooBar* obj) {for (int i = 0; i < obj->n; i++) {while(obj->x);        //等待x为0// printFoo() outputs "foo". Do not change or remove this line.printFoo();obj->x=1;        /将x设置为1}
}void bar(FooBar* obj) {for (int i = 0; i < obj->n; i++) {while(!obj->x);    //等待x为1// printBar() outputs "bar". Do not change or remove this line.printBar();obj->x=0;           //将x设置为0}
}void fooBarFree(FooBar* obj) {free(obj);
}

结果

超时!没错 肯定超时 毕竟一直卡在while里

思路2

利用上面说到的给的信号量。

typedef struct {int n;sem_t foo;//两个信号量sem_t bar;
} FooBar;FooBar* fooBarCreate(int n) {FooBar* obj = (FooBar*) malloc(sizeof(FooBar));obj->n = n;sem_init(&(obj->foo),0,1);//foo先执行所以给1sem_init(&(obj->bar),0,0);return obj;
}void foo(FooBar* obj) {for (int i = 0; i < obj->n; i++) {sem_wait(&(obj->foo));//请求foo// printFoo() outputs "foo". Do not change or remove this line.printFoo();sem_post(&(obj->bar));//释放bar}
}void bar(FooBar* obj) {for (int i = 0; i < obj->n; i++) {sem_wait(&(obj->bar));//请求bar// printBar() outputs "bar". Do not change or remove this line.printBar();sem_post(&(obj->foo));//释放foo}
}void fooBarFree(FooBar* obj) {sem_destroy(&(obj->bar));    sem_destroy(&(obj->foo));free(obj);
}

写在最后

我还能肝,肝死。。。。大家要加油,无论你们希望成为什么样的人,都需要不焦虑的一步一步靠近它!

[解题报告]【第16题】给定 n,打印一个直角边为 n 的等边直角三角形相关推荐

  1. 攻防世界XCTF-WEB入门12题解题报告

    WEB入门题比较适合信息安全专业大一学生,难度低上手快,套路基本都一样 需要掌握: 基本的PHP.Python.JS语法 基本的代理BurpSuite使用 基本的HTTP请求交互过程 基本的安全知识( ...

  2. 2019组队赛第二场(ACM International Collegiate Programming Contest, Arabella Collegiate 解题报告 Apare_xzc

    2019组队赛第二场(ACM International Collegiate Programming Contest, Arabella Collegiate 解题报告 by xzc,zx,lj 先 ...

  3. SHU 第十届程序设计联赛(夏季赛) 解题报告

    Problem A: 一日三餐开销 水题,基本上都过了,直接贴代码: 1 #include <iostream> 2 #include <cstdio> 3 using nam ...

  4. P5488 差分与前缀和 解题报告

    P5488 差分与前缀和 解题报告 link 题目大意 给定一个长度为 n n n 的序列 a i a_i ai​ ,求其 k k k 阶差分或前缀和.对 1004535809 取模. 1 ≤ n ≤ ...

  5. 2014百度之星初赛第一轮解题报告:information

    Information 时间限制: 1s 内存限制: 65536K 问题描述 军情紧急,我们需要立刻开发出一个程序去处理前线侦察兵发回的情报,并做出相应的分析.现在由你负责其中的一个子模块,你需要根据 ...

  6. 糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) Apare_xzc

    糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) xzc 2019/4/5 试题 I: 糖果 时间限制: 1.0s 内存限制: 256.0MB 本题总分:25分 [问题描述]    ...

  7. 【解题报告】博弈专场 (CF 2000~2200)前五题

    [解题报告]博弈专场 (CF 2000+)前五题 A:Fox and Card Game | CF388C 题意 思路 代码 B:Berzerk | CF786A 题意 思路 代码 C:Ithea P ...

  8. 无聊的活动/缘生意转(2018 Nova OJ新年欢乐赛B题)解题报告

    题目2(下面的太抓 我重新写了个背景 其他都一样) 无聊的活动 JLZ老师不情愿的参加了古风社一年一度的活动,他实在不觉得一群学生跳舞有什么好看,更不明白坐在身后的学生为什么这么兴奋(看小姐姐),于是 ...

  9. 攻防世界XCTF-MISC入门12题解题报告

    MISC属于CTF中的脑洞题,简直就是信息安全界的脑筋急转弯.你说它渣,它也有亮点,不好评说.这块最亮眼的入门题就属隐写术,出题人骚的狠.但是我感觉未来其中一个重点,就是大数据安全,从海量流量中捕获恶 ...

最新文章

  1. 网站DDOS***防护实战老男孩经验心得分享
  2. 数据库PHP绘制柱形图,php使用Jpgraph绘制柱形图的方法
  3. BAT会看上哪样的中小公司程序员?
  4. latex 引用_VS Code + LaTex + Zotero 写作毕业论文
  5. AJAX框架眼镜店美瞳,PS完成对照片中人物的美瞳效果
  6. 大龄程序员怎样渡过中年危机?(转)
  7. [js] js中的undefined和 ReferenceError: xxx is not defined 有什么区别?
  8. 【Daily Scrum】12-08
  9. 编程随想 关系图_IT什么岗位比较好找工作?一张金字塔图就能明白
  10. Oracle 10g 高级安装图文教程(一)
  11. 为什么采用4~20mA的电流来传输模拟量?(转)
  12. centos6.9负载均衡方案完整配置(lvs+keepalived+pxc+nfs+业务系统)
  13. Navicat Premium 12快捷键
  14. Ubuntu配置机顶盒踩坑记录(Airplay/DLNA/UPuP/Miracast)
  15. 做vue项目时报错,Error: spawnSync C:\Program Files\Java\jre1.8.0_201 ENOENT的解决办法!!!简单粗暴!!!
  16. 关于STM32、温度传感器论文的参考文献
  17. Android-组件化开发
  18. 网管实战(9):网关地址的设置
  19. 共享单车公司每年花上亿元赎车
  20. ClickHouce 常用字符串函数

热门文章

  1. 一文读懂“什么是Web 1.0,Web 2.0,Web 3.0?”
  2. javafx 教程_新的JMetro JavaFX 11兼容版本
  3. Eclipse插件Target Management (RSE)
  4. Java版本微信授权登录(测试版)
  5. 浙大翁恺pat练习题_PAT|中国大学MOOC-浙江大学翁恺-C语言程序设计习题集(更新中)...
  6. [ Arduino+Python ] 做一个串口屏,显示CPU使用率
  7. commons-math3-3.6.1-org.apache.commons.math3.analysis.function-包下的类(三)-中英对照文档及源码赏析
  8. word批量删除单选、多选题的答案
  9. Windows64Adobe2019/2019全家桶
  10. 【已解决】Mysql 存储 emoji 表情报错 Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F