
进程与线程
文章平均质量分 74
进程线程知识学习记录
编程一时爽Cxx
温故知新
展开
-
Linux驱动之 同步机制总结
Linux驱动 之同步机制总结:自旋锁和互斥锁使用场合:需求建议的加锁低开销加锁优先使用自旋锁短期锁定优先使用自旋锁长期锁定优先使用互斥体中断上下文中加锁使用自旋锁持有锁需要睡眠使用互斥体在中断上下文中只能使用自旋锁,而在任务睡眠时只能使用互斥体长时间睡眠,采用信号量、互斥体短时间,采用自旋锁相关视频讲解,B站 一口Linux :https://www.bilibili.com/video/BV1M64y127kA信号量和互斥体的选转载 2021-05-10 08:41:33 · 371 阅读 · 0 评论 -
Linux进程与线程之 用户态信号量使用
//@purpose: 基于信号量的多线程同步,操作系统原理中的P,V操作#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <semaphore.h>#include <unistd.h>#define CUSTOMER_NUM 6 /* @Scene: 某行业营业厅同时只能服务两个顾客。 * 有多个顾客到来,每个顾客如果发现服务窗口已满,就等待,原创 2021-05-09 13:27:32 · 208 阅读 · 1 评论 -
Linux进程与线程之 进程间通信IPC
进程间通信:管道,FIFO,消息队列, 信号量, 共享内存管道管道, 通常指无名管道, 是 UNIX 系统 IPC 最古老的形式①特点1. 半双工(即数据只能在一个方向上流动) , 具有固定的写端和读端2. 它只能用于具有亲缘关系的进程之间的(父子进程或兄弟进程之间)3. 万物皆文件, 可以被看成是一种特殊的文件, 可以使用普通的读些 write,read等函数。 但它不是普通文件, 并不属于其他文件系统, 只存于内存中。②原型4. #include <unistd.h>5.原创 2021-05-04 18:30:25 · 353 阅读 · 0 评论 -
Linux驱动之 内核最常见的自旋锁及死锁示例
内核当发生访问资源冲突的时候,可以有两种锁的解决方案选择:一种是原地等待,一种是挂起当前进程,调度其他进程执行(睡眠)。Spinlock是内核中提供的一种比较常见的锁机制,自旋锁是“原地等待”的方式解决资源冲突的,即一个线程获取了一个自旋锁后,另外一个线程期望获取该自旋锁,获取不到,只能够原地“打转”。(忙等待)。自旋锁优点:自旋锁不会使线程状态发生切换一直处于用户态,即线程—直都是active的;不会使线程进入阻塞状态,减少了不必要的上下文切换,执行速度快。非自旋锁在获取不到锁的时候会进入原创 2021-05-04 17:12:26 · 2376 阅读 · 0 评论 -
Linux驱动之 互斥、内核态信号量、完成量
互斥概念信号量是在并行处理环境中对多个处理器访问某个公共资源进行保护的机制,mutex用于互斥操作。mutex的语义相对于信号量要简单轻便一些,在锁争用激烈的测试场景下,mutex比信号量执行速度更快,可扩展性更好,另外mutex数据结构的定义比信号量小。struct mutex my_mutex; //定义mutex_init(&mu_mutex); //初始化 mutex_lock(&my_mutex);...... //临界资源m原创 2021-05-04 11:17:52 · 391 阅读 · 0 评论 -
Linux进程与线程 比较、进程与线程标识、信号
进程间通信原创 2021-04-05 14:44:50 · 186 阅读 · 0 评论 -
Linux进程与线程之 进程 fork、vfork函数
进程原语线程原语描述forkpthread_create创建新的控制流exitpthread__exit从现有控制流退出waitpidpthread_join从控制流中得到退出状态atexitpthread_cancel_push注册在退出控制流时调用的函数getpidpthread_self获取控制流IDabortpthread_cancel请求控制流非正常退出当线程调用 fork时,就为子进程创建了整个进程地址空间的副本。...原创 2021-04-04 23:54:07 · 218 阅读 · 0 评论 -
Linux进程与线程之 C程序启动、进程终止流程
温故稳固知识点main函数C程序总是从main函数开始执行。注意,内核使程序执行的唯一方法是调用一个exec函数。main函数的原型:int main(int argc,char *argv [ ] );//argc是命令行参数的数目,argv是指向参数的各个指针所构成的数组。当内核执行c程序时,使用一个exec函数,在调用main前先调用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址—一这是由连接编辑器设置的,而连接编辑器则由C编译器调用。启动例程从内核取得命令行参数和原创 2021-04-04 21:31:48 · 678 阅读 · 0 评论 -
Linux进程与线程之 线程、线程互斥锁mutex、条件变量
Linux系统进程与线程回顾了一下,Linux系统属于多用户、多任务、支持多线程和多CPU的操作系统。进程——资源分配的最小单位,线程——CPU调度(执行程序)的最小单位,同一进程内的线程共享进程的地址空间。为什么需要多线程处理?与多进程相比有何优势?进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗原创 2021-03-31 22:52:10 · 611 阅读 · 0 评论