当前位置: 首页 > news >正文

学习记录第二十五天

wait函数

wait函数是一个系统调用,用于等待一个子进程结束并回收其资源。当父进程调用wait函数时,它会暂停执行,直到至少有一个子进程结束。wait函数的原型如下:

#include <sys/types.h>
#include <sys/wait.h>pid_t wait(int *status);

  1.status参数是一个指针,用于存放子进程的退出状态信息。如果不需要检查子进程的退出状态,这个参数可以设置为NULL。
  2.如果wait函数成功,它返回结束的子进程的进程ID。
  3.如果调用wait函数的进程没有子进程结束,或者在等待期间被信号中断,wait函数返回-1

waitpid函数

waitpid函数提供了比wait更加灵活的接口,允许父进程等待特定的子进程结束,或者设置不同的等待选项。waitpid函数的原型如下:

#include <sys/types.h>
#include <sys/wait.h>pid_t waitpid(pid_t pid, int *status, int options);

  1.pid参数指定了要等待的子进程的进程ID。
  2.status参数是一个指针,用于存放子进程的退出状态值,退出状态值 只有最低8位有效 [0~255]
  3.options参数可以包含不同的标志,用于控制waitpid的行为,例如WNOHANG使waitpid在没有子进程结束时立即返回,而不是等待。
  4.waitpid函数在成功时返回等待的子进程的进程ID,失败时返回-1。

使用场景和差异

wait函数适用于简单的场景,即父进程等待任意一个子进程结束。而waitpid函数则适用于需要更多控制的场景,例如等待特定的子进程、等待进程组中的任一子进程或所有子进程,或者在不阻塞父进程的情况下进行等待。
waitpid函数的options参数提供了额外的灵活性,使得父进程可以根据需要调整等待行为。例如,使用WNOHANG选项可以避免父进程在没有子进程结束时被阻塞,这在编写交互式程序时非常有用。
在实际应用中,开发者应该根据具体的进程管理需求选择合适的函数。如果需要等待所有子进程结束并重拾资源,wait函数通常足够使用。如果需要更精细的控制,waitpid函数则是更好的选择。

线程

线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以拥有多个线程,这些线程共享进程的资源(如内存空间),但每个线程有自己的寄存器和局部变量。

线程的关键特点:

1.轻量级:线程之间的切换比进程之间的切换要轻量级,因为线程共享同一进程的资源,不需要进行系统调用,所以线程的创建和销毁成本较低。
  2.共享资源:同一进程内的线程共享进程的数据空间,这意味着它们可以访问相同的全局变量和文件句柄。这在需要线程间通信时非常便捷,但同时也需要小心处理并发访问,以避免数据不一致或死锁问题。
  3.并发执行:线程可以并发执行,这意味着在多核处理器系统中,不同的线程可以在不同的处理器核心上同时运行,从而提高应用程序的执行效率。

线程与进程的关系

1.区别:线程是操作系统调度的基本单元,而进程是资源分配的基本单元。进程之间是独立的,有独立的地址空间;而线程之间共享同一进程的地址空间和资源,通信更直接和快速。
  2.联系:线程是进程的一部分,一个进程可以拥有多个线程,所有线程共享进程的资源,但每个线程有自己的执行栈和寄存器。

pthread_create函数

pthread_create函数是用于在POSIX兼容的系统中创建新线程的标准库函数。它定义在<pthread.h>头文件中,并允许用户指定线程的属性、启动函数以及传递给该函数的参数。
函数原型

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine)(void *), void *arg);

参数解释

  1.thread:指向pthread_t类型变量的指针,该变量将接收新创建线程的ID。
  2.attr:指向pthread_attr_t类型变量的指针,用于设置线程的属性,如堆栈大小、调度策略等。如果不需要特殊设置,可以传递NULL以使用默认属性。
  3.start_routine:指向线程执行函数的指针,该函数的原型为void *(*start_routine)(void *),即接受一个void *类型的参数并返回一个void *类型的值。
  4.arg:传递给线程执行函数的参数,类型为void *。
返回值
  1.如果线程创建成功,返回0。
  2.如果创建失败,返回错误代码。

pthread_exit函数

pthread_exit函数用于正常结束一个线程,并可以设置线程结束时的返回值。当一个线程调用pthread_exit时,它立即停止执行,并将控制权返回给线程调度器。如果pthread_exit的参数不是NULL,该值将作为线程的返回状态传递给任何后续调用pthread_join的线程。
函数原型

void pthread_exit(void *retval);

参数解释

  1.retval:指向要传递给pthread_join的线程返回值的指针。如果线程结束时不需要传递返回值,可以传递NULL。
返回值
pthread_exit函数本身没有返回值,因为它用于结束当前线程的执行。

使用场景

pthread_exit通常在以下情况下使用:
  1.当线程完成了其任务,需要立即结束时。
  2.当线程遇到错误或异常情况,需要提前退出时。

pthread_join函数

pthread_join函数用于等待一个特定的线程结束,并从该线程中检索其返回值。这个函数是线程间同步的一种机制,可以确保主线程或其他线程在继续执行之前等待某个线程完成其工作。

函数原型

int pthread_join(pthread_t thread, void **retval);

参数解释

  1.thread:待等待结束的线程的ID。
  2.retval:指向变量的指针,用于存储被等待线程的返回值。如果不需要获取返回值,可以传递NULL。

返回值

  1.如果函数成功,返回0。
  2.如果发生错误,返回相应的错误码。

使用场景

pthread_join通常用于以下场景:
  1.当主线程需要等待子线程完成任务并获取结果时。
  2.当需要确保某个线程在程序的其他部分之前完成执行时。

#include<stdio.h>
#include <pthread.h>void *str1(void *arg)
{static char *s = "Hello World!";puts(s);pthread_exit(s);
}int main(void)
{pthread_t tid;int ret = pthread_create(&tid,NULL,str1,NULL);void *retid;pthread_join(tid,&retid);printf("exit = %s\n",(char *)retid);return 0;
}

相关文章:

学习记录第二十五天

wait函数 wait函数是一个系统调用&#xff0c;用于等待一个子进程结束并回收其资源。当父进程调用wait函数时&#xff0c;它会暂停执行&#xff0c;直到至少有一个子进程结束。wait函数的原型如下&#xff1a; #include <sys/types.h> #include <sys/wait.h>pid_…...

C语言:字符串函数strcmp

该函数用于比较两个字符串是否一样。 使用方法如下&#xff1a; #include<stdio.h> #include<string.h>int main() {//strcmp函数返回值有三种情况&#xff0c;小于零时返回-1&#xff0c;等于零&#xff0c;大于零时返回1printf("%d\n", strcmp("…...

【数据分析---偏企业】 Excel操作

各位大佬好 &#xff0c;这里是阿川的博客&#xff0c;祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 Excel操作前 必看 Python 初阶 Python—语言基础与…...

Ajax-01.原生方式

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Ajax-原生方式</title> </head> <!-…...

OpenAI GPT-2 model use with TensorFlow JS

题意&#xff1a;使用 TensorFlow JS 应用 OpenAI GPT-2 模型 问题背景&#xff1a; Is that possible to generate texts from OpenAI GPT-2 using TensorFlowJS? 是否可以使用 TensorFlowJS 生成 OpenAI GPT-2 的文本&#xff1f; If not what is the limitation, like mo…...

JVM-运行数据区(堆、栈、元空间)

文章声明&#xff1a;文章图片均来自互联网&#xff0c;因为本人画的图不够生动。 运行数据区是JVM最重要的一个区域。 运行数据区由栈、堆、元空间构成。 栈&#xff1a;程序计数器、JVM虚拟机栈&#xff0c;本地方法栈 本地方法栈&#xff1a;加载native修饰的方法&#…...

超详细!!! LVS(Linux virual server)负载均衡知识及其NAT模式、DR模式、火墙标记实验

目录 前言系统性能扩展方式集群Cluster分布式集群与分布式 四层转发与七层转发的区别 LVS&#xff08;Linux virual server&#xff09;一、LVS介绍LVS相关概念 二、LVS集群结构体系1. 负载均衡层&#xff08;Load Balancer&#xff09;2. 服务器群组层&#xff08;Server Pool…...

信息学奥赛一本通1259:【例9.3】求最长不下降序列

题目&#xff1a; 1259&#xff1a;【例9.3】求最长不下降序列 时间限制: 1000 ms 内存限制: 65536 KB 提交数:51218 通过数: 20928 Special Judge 【题目描述】 设有由n(1≤n≤200)n(1≤n≤200)个不相同的整数组成的数列&#xff0c;记为:b(1)、b(2)、……、…...

星露谷模组开发教程#3 事件

首发于Enaium的个人博客 SMAPI提供了一些事件&#xff0c;比如游戏的内容、显示、输入等事件。这些事件可以让我们在游戏中添加自己的逻辑。这一节我们就来看看如何使用这些事件。 注册一个事件 在SMAPI中&#xff0c;我们可以通过IModHelper的Events属性来注册事件。比如我们…...

C语言程序设计(初识C语言后部分)

愿天下无Bug&#xff0c;秀发常驻。 3&#xff09;函数的参数 1.实际参数&#xff08;实参&#xff09;&#xff1a; 真实传给函数的参数&#xff0c;叫实参。 实参可以是&#xff1a;常量、变量、表达式、函数等。 无论实参是何类型的量&#xff0c;在进行函数调用时&#…...

驱动基础开发

1、字符设备传统开发模板 字符设备驱动框架&#xff0c;首先我们需要去用module_init这个宏去修饰整个驱动的入口函数&#xff0c;用module_exit去修饰整个驱动的出口函数&#xff0c;然后还需要用MODULE_LICENSE用于声明模块的许可证类型。 在入口函数里面我们需要注册字符设…...

从苹果AppStore看AI开发者生态

从苹果 App Store 看 AI 开发者生态 在人工智能迅速发展的今天&#xff0c;我们不禁要问&#xff1a;未来的 AI 开发者生态将会是什么样子&#xff1f;为了回答这个问题&#xff0c;我们不妨回顾一下移动互联网时代最成功的开发者生态之一——苹果的 App Store。 通过分析 App …...

【Python学习-UI界面】PyQt5 小部件1-Label

QLabel 对象可用作显示不可编辑的文本、图像或动态GIF影片的占位符。 它还可以用作其他小部件的助记键。 标签可以显示普通文本、超链接或富文本。 1、普通文本 直接双击输入即可 2、添加超链接 选中对应Label&#xff0c;右键选择多信息文本&#xff0c;添加链接&#xff0c…...

【Linux详解】进度条实现 Linux下git 的远程上传

&#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; &#x1f680;前言 &#x…...

Android进阶之路 - res、raw、assets 资源解析、区别对比

那天遇到一个资源目录层级的问题&#xff0c;索性重新整理记录一下&#xff0c;希望能帮到如吾往昔之少年的你们&#xff0c;哈哈哈哈哈哈… 一脸茫然&#xff0c;越写越多&#xff0c;时间成本属实有点大&#xff0c;就当一起来基础扫盲吧 resdrawablemipmapvaluescolor asset…...

从数字化到数智化:消费零售企业如何实现门店数智化管理?

随着信息技术的飞速发展&#xff0c;数字化已成为企业转型的必经之路。然而&#xff0c;数字化本身并不是目的&#xff0c;而是通往数智化的桥梁。数智化&#xff0c;即数据智能化&#xff0c;是指企业通过数字化手段收集和分析数据&#xff0c;进而利用这些数据驱动决策和创新…...

Linux中ES的安装

文章目录 一、ES是什么1.1、ES概念介绍1.2、技术架构1.2.1、Lucene介绍 1.3、ES的工作原理1.4、ES的适用场景 二、安装前的配置2.1、创建普通用户2.2、调整文件描述符数量和虚拟内存2.3、设置shell会话的资源限制&#xff08;软限制和硬限制&#xff09;2.4、增加虚拟内存的设置…...

Redis远程字典服务器(5) —— hash类型详解

目录 一&#xff0c;hash基本情况 二&#xff0c;hash常用命令详解 2.1 hset&#xff0c;hget&#xff0c;hexists&#xff0c;hdel 2.2 hexists&#xff0c;hdel 2.3 hkeys&#xff0c;hvals 2.4 hgetall&#xff0c;hmget 2.5 hlen&#xff0c;hsetnx 2.6 hincrby&am…...

MySQL | 行锁——记录锁、间隙锁 、临键锁、插入意向锁

1、InnoDB中的行锁 行锁&#xff08;Row Lock&#xff09; 也称为记录锁&#xff0c;顾名思义&#xff0c;就是锁住某一行&#xff08;某条记录row&#xff09;。需要注意的是&#xff0c;MySQL服务器层并没有实现行锁机制&#xff0c;行级锁只在存储引擎层实现。 优点&#x…...

【网络编程】TCP通信基础模型实现

tcpSer.c #include <myhead.h> #define SER_IP "192.168.119.143" // 设置IP地址 #define SER_PORT 6666 // 设置端口号 int main(int argc, const char *argv[]) {// 1.创建socketint serfd socket(AF_INET, SOCK_STREAM, 0);// 参数1表示ipv4// 参数2表…...

css rem之2024

话题开始前 我们都知道1rem是等于html fontSize标签的字体大小的&#xff0c;我们主要用来做移动端网页设计稿等比例在手机上面的显示。 看到的问题 这个html fontsize的大小是通过js动态计算的&#xff0c;而这个js的运行时晚于html渲染的&#xff0c;所以会导致一个问题&am…...

python自动化笔记:pytest框架

目录 一、pytest介绍二、测试用例命名规则2.1、pytest命名规则2.2、python命名规范 三、pytest运行方式3.1、主函数方式3.2、命令行方式3.3、通过pytest.ini的配置文件运行&#xff08;常用&#xff09; 四、跳过测试用例4.1 无条件跳过4.2 有条件跳过 五、用例的前后置&#x…...

wpf 路径动画 举例

先&#xff0c;我们需要在XAML中定义一个Path&#xff0c;这个Path将定义动画的路线。然后&#xff0c;我们将使用DoubleAnimationUsingPath来沿着这个路径移动一个元素&#xff08;比如一个矩形&#xff09;。 <Window x:Class"WpfApp.MainWindow" xmlns"…...

【C++】classes and object 2.8 取地址及const取地址操作符重载

这两个默认成员函数一般不用重新定义 &#xff0c;编译器默认会生成。 #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; class Date { public:Date* operator&(){return this;}const Date* operator&()const{return this;} privat…...

milvus helm k8s开启监控

https://milvus.io/docs/monitor.md 文章写的很清晰 &#xff0c;我这边做一下个人补充&#xff0c;初版可能只是配置&#xff0c;具体的grafana 监控报表后期补一下。 架构如下&#xff1a; values.yaml 配置 enabled: true 改为true metrics:enabled: trueserviceMonitor:…...

牛奶饮用学习笔记

1. 常见牛奶类型 1.1 蒙牛-每日鲜语-0脂肪鲜牛奶 项目每100mL NRV%能量146kJ 能量计算 250 mL 146 kJ / 100 mL 365 kJ 250\text{mL}\times146\text{kJ}/100\text{mL} 365\text{kJ} 250mL146kJ/100mL365kJ 1.2 伊利-舒化-高钙型无乳糖牛奶 项目每100mL NRV%能量269kJ …...

php防止页面重复刷新或者重复提交

2.核心代码 显示的逻辑&#xff1a; //获取防止刷新的唯一标识符,start $intFlag substr(md5(time()),6); $strFlag BAOXIAOSS_.$my_user_id.$intFlag; $smarty->assign(check_is_agin_post, $strFlag); //获取防止刷新的唯一标识符,end注意&#xff1a;前端页面提交加入…...

Springboot3 配置sql打印到控制台

一、pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId><version>3.1.2</version></dependency> 二、application.yml com.lingyang.system # log4j2配…...

深入理解 GO 语言并发

1. 使用并发 在深入了解 Go 如何处理并发之前,先查看并发的概念。在计算机发展的早期阶段,计算机系统只有一个处理器负责执行所有指令。由于这种体系结构,计算机程序被编写成以串行的方式运行,在这种方式下,程序按照预定义的顺序逐个指令地执行。 随着计算机程序变得越来越…...

leetcode39组合总和

题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选…...

商城网站建设需要/合肥关键词排名工具

大数据量&#xff0c;海量数据 处理方法总结 来源&#xff1a; 葛林华的日志 大数据量的问题是很多面试笔试中经常出现的问题&#xff0c;比如baidu google 腾讯 这样的一些涉及到海量数据的公司经常会问到。 下面的方法是我对海量数据的处理方法进行了一个一般性的总结&#…...

哈尔滨 网站建设公司/软文类型

1、jQuery实现的轮播图效果: 案例要求:5张图片自动循环播放。图片播放的同时,对应着右边的数字也发生样式变化。用户鼠标移动到不同数字时,切换与该数字对应的图片,鼠标移开后,图片再次自动进行播放。 2、轮播图实现思路: (1)div+css布局,制作轮播图列表以及配套的数…...

电影网站建设费用/必应站长平台

函数说明示例String.fromCharCode()返回Unicode码对应的字符串String.fromCharCode(20013); // "中"charCodeAt()返回字符的Unicode码中.charCodeAt(); // 20013charAt()返回指定位置的字符abc.charAt(1); // "b"concat()连接两个字符串ab.concat(cd); // …...

建网站空间可以不买/同城推广平台有哪些

前言❤️ 天空黑暗到一定程度&#xff0c;星辰就会熠熠生辉 ❤️前端基础知识第一章---HTML一、HTML 简介&#xff08;1&#xff09;网页1.1 什么是网页1.2 什么是 HTML&#xff08;2&#xff09;常用浏览器2.1 常用的浏览器2.2 浏览器内核&#xff08;3&#xff09;Web 标准&a…...

服装网站建设什么公司好/注册城乡规划师教材

一、SELinux安全防护 目标&#xff1a; 本案例要求熟悉SELinux防护机制的开关及策略配置&#xff0c;完成以下任务&#xff1a; 将Linux服务器的SELinux设为enforcing强制模式 在SELinux启用状态下&#xff0c;调整策略打开vsftpd服务的匿名上传访问 从/root目录下移动一…...

动易网站默认密码/如何进行网络营销

昨日&#xff0c;台湾南海岸一带发生了7.1级地震。这次地震损坏了亚太 2号国际海底光缆 (APCN2) 。一时间&#xff0c;无数与国际网络通讯有关的业务&#xff0c;都经历了致命的堵塞。现代人类对科技的依赖&#xff0c;再一次遭到自然的嘲弄。不提这事对大洋两岸人们带来的诸多…...