- 博客(24)
- 收藏
- 关注
原创 生产者消费者问题多线程代码构建
本文实现了一个多线程的生产者-消费者模型,模拟圣诞老人分发礼物的场景。圣诞老人作为生产者将礼物装入容量为10的礼物袋,孩子们作为消费者领取礼物。系统采用互斥锁(mutex)确保线程安全,并设置全局变量控制圣诞节活动时长。生产者每隔10毫秒添加一件礼物,消费者每隔800毫秒尝试领取礼物。当圣诞节结束后,未领到礼物的孩子将离开。该程序通过sleep函数模拟实际操作的时间间隔,避免过多输出信息。代码包含Santa类和child类,分别实现礼物的添加和分发功能。
2025-06-02 22:50:58
156
原创 socketpair + sendmsg/recvmsg进行父子进程间文件描述符传递
由于附属数据结构的复杂性,Linux系统提供了一系列的C宏来简化我们的工作。另外这些宏可以在不同的UNIX平台之间进行移植,并且采取了一些措施来防止将来的改变。可以把不同地方的缓冲区聚集起来通过writev一次性全部发送出去,此时只执行一次系统调用,可以提高程序的执行效率。type 表示类型,SOCK_STREAM或SOCK_DGRAM为前者时,创建的是管道。创建的描述符任意一端既可以读也可以写,但只局限于父子进程中,是全双工的管道。domin 表示协议族,必须为AF_LOCAL或者AF_UNIX。
2024-04-23 22:13:54
610
原创 socket套接字编程
sockaddr_in 和 sockaddr 是并列的结构(占用的空间是一样的),指向 sockaddr_in 的结构体的指针也可以指向 sockadd 的结构体,并代替它,而且sockaddr_in 结构对用户将更加友好,在使用的时候进行类型转换就可以了。在服务器处理客户端请求时,如果有其他客户端请求连接,就会将这些请求放入一个队列中,当调用失败时,会返回一个-1的值,同时会设置 errno 变量以指示错误类型。成功返回读取/写入的字节数,但如果读取时小于设定读取的字节数,并不意味错误。
2024-04-21 18:20:41
909
1
原创 I/O多路复用:epoll相关接口及参数
events:将从就绪队列中获取到的事件信息保存进 events 数组中,上层就可以通过events中获取到事件信息判断接下来的操作,如果想要从就绪队列中取出多个文件描述符信息,则需要传进去一个event_poll类型的数组。成功返回获取到的事件的数量,返回0,表明在timeout时间内就绪队列一直为空,返回-1表示epoll_wait发生错误,并且设置errno错误码。epoll_ctl 接口是用来 维护 epoll 对象中红黑树的节点,epoll_ctl可以在红黑树中添加,删除,修改节点。
2024-04-18 16:10:22
648
1
原创 链表的基本操作
© 查找链表中第一个与指定值相等的结点,若没有这样的结点,则返回NULL。(d) 写一个方法,释放链表中所有的结点。(a) 采用头插法,在链表中插入元素。(b) 打印链表的所有结点的值。
2024-03-20 21:14:41
248
1
原创 [leetcode]283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]输入: nums = [0]
2024-03-17 19:13:12
404
1
原创 39. 定义一个抽象类 Shape 用以计算面积,从中派生出计算长方形、梯形、圆形 面积的派生类。程序中通过基类指针来调用派生类中的虚函数,计算不同形状的面积。
define pi3.14public:class rectangle: public Shape //长方形private:public:class Triangle: public Shape //三角形private:float Side;
2024-03-02 17:21:16
939
1
原创 35. 定义一个复数类,用友元函数实现对双目运算符“+”的运算符重载,使其 适用于复数运算。
【代码】35. 定义一个复数类,用友元函数实现对双目运算符“+”的运算符重载,使其 适用于复数运算。
2024-02-29 17:51:09
425
原创 32. 定义盒子 Box 类,要求具有以下成员:可设置盒子形状;可计算盒子体积; 可计算盒子的表面积。
【代码】32. 定义盒子 Box 类,要求具有以下成员:可设置盒子形状;可计算盒子体积;可计算盒子的表面积。
2024-02-29 03:35:03
693
原创 声明一个类 String,其数据成员为 char head[100],构造函数 String(char *Head)实现 head 的初始化,成员函数 void reverse()实现 head 内字
声明一个类 String,其数据成员为 char head[100],构造函数 String(char *Head)实现 head 的初始化,成员函数 void reverse()实现 head 内字符串的 逆序存放,成员函数 void print()实现 head 内字符串的输出。
2024-02-28 16:44:26
610
1
原创 30. 设编号为 1,2,... n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个 人又出列,依次
【代码】30. 设编号为 1,2,... n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个 人又出列,依次。
2024-02-28 01:44:31
486
1
原创 24. 国际象棋有 8×8 格,每个格子可放一个棋子。皇后的规则是可以横、竖、 斜移动。在一个棋盘放置 8 个皇后,并使它们互相无法威胁到彼此。(c)
【代码】24. 国际象棋有 8×8 格,每个格子可放一个棋子。皇后的规则是可以横、竖、 斜移动。在一个棋盘放置 8 个皇后,并使它们互相无法威胁到彼此。(c)
2024-02-23 17:53:52
869
2
原创 PAT 乙级题库 1004 成绩排名
其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。最后发现他的测试点2怎么都是错的,但是输出都是争取的,而且一个报错也没有,查了两个小时没查出来,哪位大佬能给解惑?读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。第 1 行:正整数 n。
2022-09-28 20:40:34
163
原创 SRAM六管静态mos电路特点及运行过程解析
SRAM芯片中的六管静态mos电路较DRAM芯片中的单管mos静态电路复杂且昂贵,但具有速度快,持续通电期间读出无破坏的优点。如图所示,该电路主要由六个mos管构成:
2022-08-23 15:03:09
3626
原创 29.某计算机字长为8位,cpu中有一个8位加法器……
29.某计算机字长为8位,cpu中有一个8位加法器。因此该题 y 输入端信息只需要按位取反,即:1101 1001,故。
2022-08-17 15:51:52
4892
1
原创 c语言程序设计现代方法 第5章编程题第8题
题目如图本来是使用if语句就很简单可以解决,但突发奇想使用了switch语句,感觉效率上要更高一点#include<stdio.h>#include<stdbool.h>int main(void){ int hour,minite,mark1; printf("Please put in your take-off time:"); scanf("%2d:%2d",&hour,&minite); if .
2022-01-23 01:32:13
402
原创 练习题:两位数逆序打印
编写一个程序,要求用户输人一个两位数,然后按数位的逆序打印出这个数。程序会话应类似下:Enter a two-digit number: 28The reversal is: 82#include<stdio.h>int main(){ int i; int TWODIGIT_NUM; int REVERSAL; printf("Enter a two-digit number:"); scanf("%d",&TWODIGIT_NUM)
2022-01-16 18:36:50
1209
原创 原码一位乘的数值运算
原码一位乘的数值运算今天看原码的乘法,总感觉整个过程被讲复杂了。刚好在这里总结一下。因为我看的教材时唐朔飞版的计组,所以很多就引用书上的内容来写一下我自己的理解,感觉能比较容易理解,至少没那么抽象。首先是笔算乘法。这个很简单,看一下就会发现,这其实和我们小学时学十进制乘法写竖式没什么太大区别,就是下面的数从最末尾开始依次与上面的数相乘然后相加。(见下图)这里是引用但是这种办法在计算机中是不合适的,无论是从算法还是硬件实现来说。因此需要对算法进行改进,让其符合计算机的工作流程。(改进后的算式
2021-08-16 00:54:57
7951
2
原创 数据边界对齐储存
数据对齐储存实际就是让数据地址按照其数据类型大小的整数倍进行储存,目的在于使得数据能以最少的次数连续读取。假如32位的系统读取数据时一个字是32位或者4个字节,当数据储存时,会尽量按照数据类型大小的整数倍进行地址分配。比如数据中:int为4个字节;long long是8个字节;char为1个字节。那么在内存地址分配上:int只能放在首地址为0,4,8的位置上;long long放在首地址为0,8,16的位置上;char可以放在任意位置上。当计算机进行读操作时,对于int类型数据只需要一个
2021-04-01 03:58:03
17051
11
原创 1003 我要通过!
1003 我要通过! (20 分)“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是
2021-03-23 00:43:50
419
原创 1002 写出这个数 (20 分)
**1002 写出这个数 (20 分)**读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。输出格式:在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。输入样例:1234567890987654321123456789输出样例:yi san wu#include<stdio.h>int Fig
2021-03-22 01:27:58
236
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人