线程间同步机制的总结

来源:互联网 发布:怎么用c语言玩单片机 编辑:程序博客网 时间:2024/06/05 22:49

多线程共享同一个进程的地址空间
优点:线程间较容易实现通信,通过全局变量实现数据共享和交换,
缺点:多个线程同时访问共享资源容易出现资源竞争,所以要引入同步和互斥机制。

线程间同步:无名信号量,互斥锁,事件,临界区;(后两个用的较少)
无名信号量:实现同步的机制步骤
(1)定义全局变量sem_t sem1,sem2;
(2)在进程中初始化信号量:int sem_init(sem_t *sem,int pshared,int value);
(3)进行P操作:int sem_wait(sem_t * sem);//信号量减一
(4)进行V操作:int sem_post(sem_t * sem);//信号量加一
注意:在这里可以使用一个信号量实现互斥锁;
互斥锁: 实现同步机制的步骤
(1)定义全局变量 pthread_mutex_t mutex;
(2) 初始化互斥锁 int pthread_mutex_init(pthread_mutex_t * mutex,pthread_mutexattr_t *attr);
函数参数 mutex :互斥锁
attr : 互斥锁属性 //NULL表示缺省属性
(3) 申请互斥锁 int pthread_mutex_lock(pthread_mutex_t * mutex);
函数参数 mutex
函数返回值 成功 0,出错 -1
(4) 释放互斥锁 int pthread_mutex_unlock(pthread_mutex_t * mutex);
函数参数 mutex
函数返回值 成功 0,出错 -1
无名信号量和互斥锁的实例可以访问这篇博客
http://blog.csdn.net/xld_hung/article/details/75212332
事件:事件机制,则允许一个线程在处理完一个任务后,主动唤醒另外一个线程执行任务。

临界区:当多个线程访问一个独占性共享资源时,可以使用临界区对象。
拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想访问,
则被挂起,直到拥有临界区的线程放弃临界区为止
更多关于事件和临界区的知识可以访问下面这篇博客
http://blog.csdn.net/minglingji/article/details/7488652