- 博客(14)
- 问答 (1)
- 收藏
- 关注
翻译 进程同步与互斥
写者1写完后,释放共享文件访问权,并唤醒写者2写文件,读者因写者2占用预占位被阻塞;例如,当缓冲区满时(empty = 0),若生产者先执行wait(mutex),访问缓冲区,再执行wait(empty)时,会被阻塞,它将始终占用缓冲区访问权无法释放,消费者无法取走产品,从而导致生产者、消费者都被阻塞且无法被唤醒(例如,两个进程都未进入自己的临界区时,它们的标志位均为false,如果此时两个进程都想进入临界区,并且检查发现彼此的标志位均为false,那么这两个进程会同时进入自己的临界区,发生错误。
2025-01-02 01:11:28
17
原创 《C程序设计语言》(《The C Programming Language》)第二版第八章练习题
8-1:用read、write、open和close系统调用替代标准库中功能等价的函数,重写第七章的cat程序,并通过实验比较两个版本的相对执行速度#include <stdio.h>#include <fcntl.h>#define BUFSIZE 1000int main(int argc, char **argv){ int fp; void fi...
2020-05-14 16:24:48
473
5
原创 《C程序设计语言》(《The C Programming Language》)第二版第七章练习题
7-1:编写一个程序,根据它自身被调用时存放在argv[0]中的名字,实现将大写字母转换为小写字母或将小写字母转换为大写字母的功能/*gcc编译时会生成一个名为a.exe的程序,我们以前在命令行参数程序中argv[0]输入的就是a.exe此处采用gcc的-o命令改变生成的程序文件名,例如以前输入gcc xxx.c生成a.exe程序文件,现在采用-o命令,输入gcc xxx.c -o u生成...
2020-04-30 13:28:27
656
原创 《C程序设计语言》(《The C Programming Language》)第二版第六章练习题
6-1:上述getword函数不能正确处理下划线、字符串常量、注释及预处理器控制指令。请编写一个更完善的getword函数/*原函数无法识别带下划线的字符串,例如keytab数组将if和else视为关键字,但是如果我们输入if_else,这其实不是关键字,但是程序还会将其保留,我们需要排除这种情况,同时对于""包裹的字符串常量、注释符包裹的注释语句、预处理器指令,我们需要排除这些语句*/...
2020-04-28 16:04:27
543
2
原创 《C程序设计语言》(《The C Programming Language》)第二版第五章练习题
5-1:在上面的例子中,如果符号+或-的后面紧跟的不是数字,getint函数将把符号视为数字0的有效表达式。修改该函数,讲这种形式的+或-符号重新写会到输入流中#include <stdio.h>#include <ctype.h>#define BUFSIZE 100int buf[BUFSIZE];int bufp = 0;int getch(voi...
2020-04-26 10:57:22
1366
3
原创 《C程序设计语言》(《The C Programming Language》)第二版第四章练习题
4-1:编写函数strindex(s, t),它返回字符串t在s中最右边出现的位置。如果s中不包含t,则返回-1#include <stdio.h>#include <string.h>#define MAXSIZE 1000int getline(char s[], int lim);int strindex(char s[], char t[]);i...
2020-04-18 13:17:47
977
原创 《C程序设计语言》(《The C Programming Language》)第二版第三章练习题
3-1:在上面有关折半查找的例子中,while循环语句内共执行了两次测试,其实只要一次就足够(代价是将更多的测试放在循环外执行)。重写该函数,使得在循环内部只执行一次测试。比较两种版本函数的运行时间#include <stdio.h>#define SIZE 100int binsearch(int x, int v[], int n);int main(){ int ...
2020-04-14 15:54:42
282
原创 《C程序设计语言》(《The C Programming Language》)第二版第二章练习题
2-1:编写一个程序以确定分别由signed及unsigned限定的char、short、int与long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现,后一种方法的实现困难一些,因为要确定各种浮点类型的取值范围...
2020-04-10 17:47:45
341
原创 《C程序设计语言》(《The C Programming Language》)第二版第一章练习题
1-1:#include<stdio.h>int main(){ printf("Hello, World!\n"); return 0;}/*自由删除程序中部分代码,查看运行结果*/1-2:#include<stdio.h>int main(){ printf("Hello, World!\c"); return 0;}/*打印结果为Hel...
2020-04-09 17:48:10
671
1
原创 关于《C Primer Plus》第六版第十七章film2.c程序
最近在学习《C Primer Plus》第六版第十七章时,发现书中的film2.c程序在执行过程中出现了一些问题,先附上书中的代码:#include<stdio.h>#include<stdlib.h>//包含malloc函数和free函数的头文件#include<string.h>//包含strcpy函数和strchr函数的头文件#define SIZ...
2020-04-08 14:24:44
483
原创 链表处理函数中传递的参数为什么是指向指针的指针?而不是直接传递指针?
首先,我们看一下书中初始化链表的代码:#include<stdio.h>#define TSIZE 45typedef struct film { char title[TSIZE]; int rating;} Item;//储存电影信息的结构typedef struct node { Item item; struct node * next...
2020-04-01 18:01:41
1743
原创 《C Primer Plus》第十七章二叉查找树tree.c程序详解
个人认为这个程序是这本书最难的,所以花的时间很多://接口头文件.h#ifndef _TREE_H_#define _TREE_H_/*二叉树ADT抽象定义: 类型名: 二叉查找树 类型属性: 二叉树要么是空节点的集合(空树),要么是由一个根节点的节点集合 每个节点都有两个子树,叫做左子树和右子树 每个子树本身也是二叉树,也有可能是空树 ...
2020-03-31 17:31:28
402
原创 C语言二叉树中的递归调用
最近正在学《C Primer Plus》,对于书中第十七章的二叉查找树部分的递归调用有些困惑,在查找了相关解释后,总算是明白了一点,和大家分享一下吧首先,附上书中的部分代码://函数调用语句为:InOrder(ptree -> root, pfun)//即最先传入函数的是指向树根节点的指针,而函数指针pfun指向的是printitem函数static void InOrder(con...
2020-03-31 14:35:05
558
空空如也
C语言释放链表节点出现错误
2020-03-26
TA创建的收藏夹 TA关注的收藏夹
TA关注的人