![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
待木成植2
作品...持续更新......
展开
-
阻塞--条件变量 & 信号量
条件变量读写锁与互斥锁的缺点:不是什么时候都能阻塞线程只能够保证共享资源在什么时候被阻塞条件变量能够在不满足条件的时候阻塞线程当条件满足,通知阻塞线程开始工作要实现线程同步与共享资源,还得跟互斥锁一起使用生产者消费者模型#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <string.h>#incl原创 2021-10-27 16:19:49 · 191 阅读 · 0 评论 -
死锁与读写锁
死锁原因自己锁自己,所以,操作结束之后一定要解锁多个资源多个锁,让线程按照一定的顺序去访问共享资源去访问其它共享资源之前先解自己的锁trylock读写锁pthread_rwlock_t lock;读写锁谁的优先级高,则在阻塞时,谁就可以优先加锁互斥锁–读写串行,适用于读写串行读写锁–读:并行、写:串行,适用于读的数目>写的时候#include <stdio.h>#include <unistd.h>#include <stdlib.h>原创 2021-10-26 21:20:23 · 180 阅读 · 0 评论 -
互斥锁相关概念
互斥锁(又名互斥量)互斥锁类型: pthread_mutex_t mutex;步骤:创建互斥锁 pthread_mutex_t mutex;初始化锁:pthread_mutex_init (&mutex, NULL);寻找共享资源操作共享资源的代码前加锁: pthread_mutex_lock(&mutex); 成功则返回0.。。。。pthread_mutex_unlock (&mutex); 成功返回1互斥锁锁住的代码块越大,效率越低。临界区:被lock和unl原创 2021-10-26 18:09:10 · 300 阅读 · 1 评论 -
线程同步的概念
线程同步的概念一个主线程创建了多个子线程,子线程之间的执行没有顺序,cpu:寄存器存储少量数据实时与物理内存做数据交换取值的时候:通过内存地址具体的过程初始值0,cpu运行时计算的值100没有机会放入内存,此时线程1失去了cpu,线程2开始运行,取得的值0线程2计算的200及时放入内存,此时内存中为200此时线程1又开始运行,继续操作之前的100,此时的100就将前面的200覆盖在上面的过程中发生了覆盖,数据混乱,原因:操作了共享资源cpu调度时分到的时间片并不一定完全相同,原创 2021-10-26 15:29:07 · 122 阅读 · 0 评论 -
线程相关概念
线程相关概念通过pthread_create可以创建一个新的进程是通过增加pcb的方式创建线程之后,地址空间没有变化,进程退化成了线程,为主线程创建出的子线程和主线程公用地址空间。在main函数里的进程为主进程。主线程和子线程有各自独立的pcb,子线程的pcb是从主线程拷贝来的共享内容:.text 代码段.bss未初始化的变量.data初始化的变量堆动态库加载区环境变量命令行参数通信的时候可以使用:全局变量,堆不共享栈,一共有几个线程,栈区就被平均分为5份。linux和w原创 2021-10-13 22:34:04 · 61 阅读 · 0 评论 -
操作系统-线程创建
线程创建pthread_createint pthread_create(pthread_t *thread, //线程ID,为无符号长整型,说明非常大//非常大的线程ID,为7、8位,进程数为5、4位//为传出参数const phread_attr_t *attr, //线程属性,可以设置分里还是不分离//为NULL表示默认不分离void *(*start_routine)(void *), //线程处理函数void *arg //线程处理函数参数,给上面的回调函数传参);返回值成原创 2021-10-13 22:33:17 · 583 阅读 · 0 评论 -
孤儿、僵尸进程
孤儿进程父进程死亡,但是子进程还没有死亡,该子进程为孤儿进程。子进程被init进程领养,init进程变成孤儿进程的父进程目的:为了释放子进程占用的系统资源。进程结束之后,能够释放用户区空间,但释放不了pcb(进程控制块),该pcb必须由子进程的父进程进行释放。#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <st原创 2021-10-13 16:50:38 · 66 阅读 · 0 评论 -
进程回收wait
进程回收wait阻塞函数pid_t wait (int * status);返回值:a) -1 回收失败,说明已经没有子进程。b) 大于0:回收是子进程的pid参数: status判断子进程是如何死的a) 正常退出b)被某一个信号杀死调用一次只能回收一个子进程子进程的退出状态 --传出参数WIFEXITED(status):为非0,进程正常结束WEXITSTATUS(status)如果上面的宏为真,则使用现在的这个宏来获取进程退出状态的参数。WIFSIGNALED(statu原创 2021-10-13 16:49:42 · 78 阅读 · 0 评论 -
exec函数族
exec函数族1、让父子进程执行不相干的操作。调用该函数之后,父子进程之间没有任何瓜葛2、能够替换进程地址空间的源代码.txt段,实现换核不换壳(地址空间没有被释放,只是地址里面的源代码换了,也就是说,执行一个另外的程序不需要创建额外的地址空间)的功能3、当前程序调用另外一个应用程序a)首先想到exec之前需要fork创建子进程执行指定目录下的程序execl 变参函数int excel (const char *path, const char *arg, …);path : 要执行程序的绝原创 2021-10-13 09:31:10 · 81 阅读 · 0 评论 -
进程间的共享
进程间数据共享刚fork出来的两个地址的空间用户区数据完全相同后续各自都做了不同的操作,各个进程的地址空间是完全独立的。互不影响。对于一个变量,只做读操作,物理内存中的数据是一份,也就是说,读的时候是共享的。但是,在修改的时候,会拷贝一份再进行修改。即读时共享,写时复制问题:父子之间可不可以通过全局变量进行通信?不能,两个进程间内存不能共享可以用下列程序进行验证要实现共享内存,必须用到管道,文件等待。#include <stdio.h>#include <unistd原创 2021-10-12 22:37:37 · 790 阅读 · 0 评论 -
OS OpenEuler安装
官方社区提供的安装指南网址为https://openeuler.org/zh/docs/20.03_LTS/docs/Installation/installation.html包括软硬件等多种方式进行OpenEuler操作系统的安装。OpenEuler操作系统官方网站为:https://openeuler.org/zh/;OpenEuler操作系统源代码网址为https://gitee.com/openeuler。...原创 2021-09-20 17:28:33 · 233 阅读 · 0 评论