- 博客(7)
- 问答 (1)
- 收藏
- 关注
原创 Linux线程介绍(2)互斥量
互斥量(mutex)从本质上来说是一把锁,在访问共享资源前对互斥量进行加锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁后,任何其他试图再次对互斥量加锁的线程将会被阻塞直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变为可运行状态的线程可以对互斥量加锁,其他线程将会看到互斥锁依然被锁住,只能回去等待它重新变为可用。在这种方式下,每次只有一个线程可以向前运行。互斥变量用pthread_mutex_t数据类型表示。
2023-05-27 19:55:53 75 1
原创 Linux线程介绍(1)
总结文章的内容,使用线程的两大理由:使用多线程的是和进程相比,它是一种非常"节俭"的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。
2023-05-26 16:10:12 85 1
原创 fork进程空间分配
可以看到,它先是执行的父进程,父进程之中对a进行了+10操作,其打印出来为30;但是在子进程中还是10,为什么呢?而且我先执行的也是父进程呀,那这是为啥呢?早期方法是将父进程的所有内存都拷贝到子进程中去,除了未被初始化的数据以外。而现在的方法都是写时拷贝,就是当子进程使用到了某个变量之后才进行拷贝。
2023-05-24 20:05:34 58
原创 创建进程用来干嘛
(1)一个父进程希望复制自己,使父、子进程同时执行不同的代码段。这在网络服务进程中是常见的一一父进程等待客户端的服务请求。当这种请求到达时,父进程调用fork,使子进程处理此请求。父进程则继续等待下一个服务请求到达。(2)一个进程要执行一个不同的程序。这对shell是常见的情况。在这种情况下,子进程从fork返回后立即调用exec。当输入1的时候,会创建一个子进程,这个子进程就负责干一些工作,而父进程就继续接收请求。当输入完1的时候,就创建了一个子进程,这个子进程就一直输出。,而父进程继续接受外部的请求。
2023-05-24 19:57:41 57 1
原创 fork函数
此处说明,如果fork返回值大于0,代表是父进程,而且这个大于0的数值是子进程的ID,如果返回值等于0,代表进入子进程。可以看到,before就执行了一次,说明子进程是从fork()函数之后开始执行的。返回值为0, 代表当前进程是子进程。返回值非负数,代表当前进程为父进程。fork函数调用成功,返回两次。
2023-05-24 19:53:52 96 1
原创 Linux文件操作
类似于Windows打开创建文件,Linux的过程:操作系统提供了一系列的API;如Linux系统:打开 open读写 write /read光标定位 lseek关闭 close。
2023-05-24 19:42:58 91
ST-Link驱动文件
2023-03-12
线性代数和C语言有关系吗
2021-06-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人