目录
一、学习的知识点
PCB结构体包含进程所有信息 有PID 时间片等等
时间片是CPU分配给进程运行的单位时间。
CPU时间片轮转
进程切换开销大吗
进程切换需要保存进程运行信息,进程数量越多,开销越大
线程函数库
头文件 <pthread.h> 编译带线程函数库的程序时要加 -lpthread
pthread_create函数
- 功能:创建一个新的线程
- 原型:int pthread_create(pthread_t *thread,
pthread_attr_t attr,
void(start_routine)(void),
void *arg); - 参数:
- thread:新线程创建成功后,保存新线程的标识符
- attr:设置线程的属性,直接传NULL即可
- start_routine: 是个函数地址,线程启动后要执行的函数
- arg:传给线程启动函数的参数
- 调用成功时返回值是“0”,如果失败则返回一个错误。
线程同步
信号量
头文件 <semaphore.h>
信号量对象用sem_t表示
sem_init函数
- 功能:创建一个信号量
- 原型:int sem_init(sem_t *sem,int pshared,unsigned value);
- 参数:
- sem: 要进行初始化的信号量对象
- pshared:控制着信号量的类型,如果值为0,表示它是当前进程的局部信号量;否则,其他进程就能够共享这个信号量
- value:赋给信号量对象的一个整数类型的初始值
- 调用成功时 返回 0;
sem_wait函数
- 功能:从信号量的值减去一个“1”,但它永远会先等待该信号量为一个非零值才开始做减法
- 原型:int sem_wait(sem_t *sem);
- 参数:
- sem: 初始化的信号量对象的指针作为参数,用来改变该对象的值
- 调用成功时 返回 0;
sem_post函数
- 功能:给信号量的值加上一个“1”
- 原型:int sem_post(sem_t *sem);
- 参数:
- sem: 初始化的信号量对象的指针作为参数,用来改变该对象的值
- 调用成功时 返回 0;
互斥量
每次只允许一个线程去访问它
生产者消费者模型
生产者
- sem——wait();
//做蛋糕
pthread_mutex_lock();
g_count+1;
pthread_mutex_unlock(); - sem_post();
消费者
- sem_wait()
pthread_mutex_lock
g_count-1
pthread_mutex_unlock
二、上课没有听懂或者没有理解的地方
无