2026/8/15 22:36:08

信号量与互斥体对zynqMP的ps_led的互斥访问

信号量与互斥体对zynqMP的ps_led的互斥访问 信号量1信号量简介2信号量与自旋锁区别当线程满了以后自旋锁会一直循环等待而信号量会引起休眠与阻塞阻塞态。信号量适用于占用资源比较久的场合而自旋锁的临界区不能耗时太久注意一个进程从运行态变成休眠态也是需要消耗资源的这个消耗可能比一个进程在外面循环等待的消耗还要久所以信号量不适合共享资源持有时间短的。·3信号量API函数dowm函数就是对应原子操作Pup函数对应原子操作V。4信号量实验gpioled.c为基础1在结构体中加入信号量2初始化规定过一个信号量val它的值1称为二值信号量实现对资源的互斥访问否则称为计数形信号量。3修改open函数就是获取信号量dowm_interruptible函数如果获取信号量失败只会进入休眠并不会返回非零值。如果是被打断了则会返回非零值4修改release函数调用up代码5实验结果当第二个应用程序去访问这个led设备的时候它并没有报错并没有显示打开文件失败反而是进入了一个休眠状态等待信号量可用的时候它才会被唤醒并且去执行自己的操作。6. dowm_interruptible与dowm区别Ctrlc是中断的一种如图如果使用的dowm函数第二个应用程序去访问这个led设备的时候进入了休眠状态这个时候Ctrlc结束不了进程。互斥体1.互斥体简介注互斥体 互斥锁 二值信号量是专门用于信号互斥访问。注特点12与信号量一样特点3和自旋锁一样。2.互斥体API函数only one task can hold the mutex at a time3.互斥体实验(1)添加互斥体初始化3修改open函数打开互斥锁mutex_lock_interruptible函数如果获取互斥体失败只会进入休眠并不会返回非零值。如果是被打断了则会返回非零值4修改release函数4.实验结果实验现象与信号量实验一样。