线程并发引起的同步问题
线程以并发形式运行,当并发的线程间访问共享数据时,会发后争用现象,不进行同步控制的线程运行会造成不恰当的结果。
生产者消费者同步问题
生产者消费者是典型的同步问题,他们共享了一个缓冲池(全局变量数组),当缓冲池有空位时生产者线程向缓冲池中依次赋值,如果缓冲池满则等待。当缓冲池中有数据时消费者线程从中取走数据,如果缓冲池空则等待。
如何解决线程间访问共享变量的冲突问题
当多个线程访问同一个共享变量时,共享变量成为临界资源,它需要操作系统提供同步控制机制,以保证多个线程可以依序访问,当一个线程操作临界资源时其它线程不会中断其操作,因此对临界资源的操作是安全的。
需要使用到的头文件和方法
#include <semaphore.h>
int sem_init(sem_t * sem, int pshared, unsigned int value);//创建信号量变量,value是信号量的初值
int sem_destroy(sem_t *sem);//销毁信号量
int sem_post(sem_t * sem); //信号量值增加1,并激活处于等待状态的线程
int sem_wait(sem_t * sem); //信号量值减少1 为0时将调用该方法的线程被OS阻塞
代码实现
//stu001.c 生产者消费者同步控制,由学生完成缺失代码。
//主线程序启动生产者线程和消费者线程,全局变量初值为0
//生产者线程向全局变量进行10次赋值(代表生产),消费者线程从全局变量读取值,/