I.MX6ULL DDR3L实战:从时序参数到硬件设计的配置要点与避坑指南
2026/6/11 10:35:03
进程互斥与同步的定义
信号量(Semaphore)的概念
信号量是一种用于解决进程间同步与互斥问题的数据结构,由荷兰科学家Dijkstra提出。它是一个整型变量,包含两个关键属性:
P-V 操作(原语)
P操作(也称wait操作)和V操作(也称signal操作)是对信号量进行的两种原子操作,不可被中断。
P(sem) { sem = sem - 1; if (sem < 0) { 将当前进程插入到sem的等待队列; 阻塞该进程(让出CPU); } }V(sem) { sem = sem + 1; if (sem <= 0) { 从sem的等待队列中唤醒一个进程; 被唤醒的进程变为就绪状态; } }其中,P操作对应“申请-等待”,V操作对应“释放-通知”。两者结合可实现对临界资源的安全访问以及进程间的协调运行。
使用信号量实现进程互斥的核心思想是:将临界资源的访问权限通过一个二进制信号量(初始值为1)进行控制,确保同一时刻只有一个进程可以进入临界区。
mutex,初始值为 1(表示临界资源空闲)。假设两个进程Process A和Process B共享一个临界资源(如共享变量counter),需互斥访问。
// 全局定义信号量 mutex,初始值为 1semaphore mutex=1;// 进程代码结构(以A为例)voidProcess_A(){while(1){// 非临界区操作do_non_critical_section();// 进入临界区前:P操作P(mutex);/* 临界区开始 */do_critical_section();// 如:counter++, 文件写入等/* 临界区结束 */// 离开临界区后:V操作V(mutex);// 剩余操作do_remaining_section();}}// Process_B 结构相同,使用同一个 mutex 信号量| 时间 | 操作 | mutex 值 | 说明 |
|---|---|---|---|
| t0 | Process A 执行 P(mutex) | 0 | 成功进入临界区 |
| t1 | Process B 执行 P(mutex) | -1 | 资源已被占用,B 被阻塞 |
| t2 | Process A 执行 V(mutex) | 0 | 释放资源,唤醒 B |
| t3 | Process B 被唤醒继续执行 | -1 → 实际变为 0 后运行 | 进入临界区 |
注:当
mutex = 1表示资源可用;0表示被占用;负数表示有进程等待。
这种方式简单有效,广泛应用于操作系统中对打印机、共享内存、文件等资源的互斥访问控制。