【C/C++】C++基础_3_进程,信号,进程间通信,/多线程,线程同步


1.进程:ps,getpid(),fork(),>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
getpid库函数功能是获取进程编号
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多进程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面第一行是父进程,第二行是子进程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进程应用,并发的概念如下
在这里插入图片描述
在这里插入图片描述
并发的应用,以下在服务端中
在这里插入图片描述
以下服务端中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面为分析上面的代码
在这里插入图片描述
在这里插入图片描述

2.信号:signal(.,EXIT)

如何让程序在后台运行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
信号对进程而言
在这里插入图片描述
如下信号名实质上就是宏
在这里插入图片描述
如上子进程结束会向父进程发送信号名为SIGCHLD,如果父进程没有处理这个信号,那这个子进程就变成了僵尸进程。
信号值11就是自己非法使用空指针或者乱用地址,和信号值9一样就算加上忽略代码也不能被忽略。
在这里插入图片描述
在这里插入图片描述
如上第三种恢复信号处理方法默认值一般不用,自定义函数如下EXIT函数
在这里插入图片描述
下面 EXIT函数就是自定义函数,TcpServer设为全局变量因为EXIT函数要访问它并关闭socket
在这里插入图片描述
在这里插入图片描述
如下ctrl+c和kill/kill all命令都能调用EXIT函数来关闭进程,不叫杀进程了,叫通知退出
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面是操作系统kill命令发信号,不是C语言kill函数。kill不能杀其他用户进程
在这里插入图片描述
kill函数的返回值为0成功,-1失败。这个特点会用在进程的监控上,下面argv[1]就是kill第一个参数即pid编号,argv[2]第二个参数 是信号值
在这里插入图片描述
在这里插入图片描述

3.进程间通信:shmget()

进程数据空间是相互独立的,不能互相访问。但某些情况下进程间需要互相通信来完成系统某项功能或交换数据
如下是进程通信场景
在这里插入图片描述
消息队列类似socket,不过只能在本机。一般共享内存和信号灯结合起来用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.示例程序:对指针操作相当于对共享内存操作
在这里插入图片描述
写入的就是字符串"本程序的进程…",有redis就不用自己写共享内存
在这里插入图片描述在这里插入图片描述

4.多线程:pthread_create()

在这里插入图片描述
第一个参数中pthread_t(数据类型):typedef unsigned long int pthread_t,无符号长整型
在这里插入图片描述
新客户端连上启动一个线程而不是进程,下面为查看线程主函数怎么写,pthread_create是C语言库函数
在这里插入图片描述
将thread_start改为pth_main(线程主函数)
在这里插入图片描述
如下就按照上面形式这么写
在这里插入图片描述
下面在服务端中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面打印出socket
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如上(void*)ii = void*arg
在这里插入图片描述
单进程多线程:只杀进程(不存在杀线程),进程杀了线程自动退出
多进程:父进程被杀,子进程不退
多线程会出现赋值没完成线程切换,值被取走,值就不是原来那个值

5.线程同步:pthread_mutex_t

在这里插入图片描述
在这里插入图片描述
pthread_mutex_t 结构体。数据输入:网页登陆。数据展示:java,微软的.net,c#。共享资源:全局变量全局对象(数据库连接词,socket,日志文件对象)
在这里插入图片描述
打开方式为a+,因为日志文件不断在末尾追加内容
在这里插入图片描述
在这里插入图片描述
如上book242没有把内容写在屏幕上而是写到了日志文件
在这里插入图片描述
在这里插入图片描述
killall book242 杀死进程后上面查看.log文件就可显示,以下修改为可选缓冲区写解决缓冲问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多个线程用logfile共享资源,可能会出问题(文件内容写错乱),给logfile定义一个锁,一个共享资源一个锁
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面运行和之前写入日志一样,表面看不出效果,以下修改睡一秒
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
20个客户端发30个报文不是一闪而过了,锁锁住了1秒,所以发完要(20*30)秒
在这里插入图片描述

发布了18 篇原创文章 · 获赞 113 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43435675/article/details/103216651