操作系统笔记之临界区
·
操作系统笔记之临界区

code review!
文章目录
1.一句话描述临界区
临界区(Critical Section)是指进程或线程中访问共享互斥资源的那段必须互斥执行的代码。
2.另外一句话描述临界区
临界区是指进程或线程中访问共享资源(如共享变量、文件等)的一段代码,为避免竞态条件,任意时刻只允许一个进程/线程进入执行。
3.示例
以下是一个使用 C 语言 + POSIX 线程(pthread)互斥锁实现临界区保护的极简完整示例:
#include <stdio.h>
#include <pthread.h>
int counter = 0; // 共享资源
pthread_mutex_t lock; // 互斥锁
void* increment(void* arg) {
pthread_mutex_lock(&lock); // 进入临界区
counter++; // 访问共享资源
pthread_mutex_unlock(&lock); // 离开临界区
return NULL;
}
int main() {
pthread_t t1, t2;
pthread_mutex_init(&lock, NULL);
pthread_create(&t1, NULL, increment, NULL);
pthread_create(&t2, NULL, increment, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
printf("counter = %d\n", counter); // 输出结果应为 2
pthread_mutex_destroy(&lock);
return 0;
}
说明:
counter是两个线程共享的资源。pthread_mutex_lock和pthread_mutex_unlock之间的代码就是临界区。- 互斥锁保证任意时刻只有一个线程能执行
counter++,避免竞态条件,确保最终结果正确为2。
4.临界区和共享资源的区别
4.1.共享资源(Shared Resource)
指多个进程或线程可以同时访问的数据或设备,例如:全局变量、文件、打印机、数据库记录等。它是一种"资源",是被访问的对象。
4.2.临界区(Critical Section)
指访问共享资源的那段代码,例如对全局变量进行读写操作的代码块。它是一段代码/程序执行区域,是访问共享资源的过程。
4.3.核心区别
| 对比点 | 共享资源 | 临界区 |
|---|---|---|
| 本质 | 数据/对象(名词) | 代码段/操作(动词性) |
| 作用 | 被多个线程/进程共享使用 | 用来访问共享资源 |
| 关注点 | "是什么"被共享 | "怎么"安全地访问 |
4.4.一句话总结
共享资源是"被保护的对象",临界区是"保护这个对象的那段代码"。 临界区存在的目的,就是为了安全地访问共享资源,避免多个线程同时操作导致数据不一致(竞态条件)。
举例:银行账户余额 balance 是共享资源;而执行 balance = balance - amount; 这行取款代码,就是临界区——必须保证同一时刻只有一个线程能执行它。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)