现在的位置: 首页 > 综合 > 正文

多线程编程

2013年08月09日 ⁄ 综合 ⁄ 共 1077字 ⁄ 字号 评论关闭
 1.互斥锁基本原理
互斥以排他方式防止共享数据被并发修改。互斥锁是一个二元变量,其状态为开锁(允许0)和上锁(禁止1),将某个共享资源与某个特定互斥锁绑定后,对该共享资源的访问如下操作:
(1)在访问该资源前,首先申请该互斥锁,如果该互斥处于开锁状态,则申请到该锁对象,并立即占有该锁(使该锁处于锁定状态),以防止其它线程访问该资源;如果该互斥锁处于锁定状态,默认阻塞等待;
(2)只有锁定该互斥锁的进程才能释放该互斥锁。其它线程的释放操作无效。
互斥锁基本操作函数
初始化互斥锁 pthread_mutex_init
阻塞申请互斥锁 pthread_mutex_lock
释放互斥锁 pthread_mutex_unlock
非阻塞申请互斥锁 pthread_mutex_trylock
销毁互斥锁 pthread_mutex_destroy 
2 条件变量基本原理 互斥锁不能解决的问题
初始化条件变量  pthread_cond_init
阻塞等待条件变量 pthread_cond_wait
通知等待该条件变量的第1个线程 pthread_cond_signal
在指定的时间之内阻塞等待条件变量 pthread_cond_timedwait
通知等待该条件变量的所有线程 pthread_cond_broadcast
销毁条件变量状态 pthread_cond_destroy
3 读写锁通信机制
在对数据的读写应用中,更多的是读操作,而写操作较少,例如对数据库数据的读写应用。为了满足当前能够允许多个读出,但只允许一个写入的需求,线程提供了读写锁来实现。其基本原则如下:
(1)如果有其它线程读数据,则允许其它线程执行读操作,但不允许写操作;
(2)如果有其它线程写数据,则其它线程的读、写操作均允许。因此,其将该锁分为了读锁和写锁。
(1)如果某线程申请了读锁,其它线程可以再申请读锁,但不能申请写锁;
(2)如果某线程申请了写锁,则其它线程不能申请读锁,也不能申请写锁。定义读写锁对象的代码如下:
 pthread_rwlock_t rwlock;   //全局变量
初始化读写锁 pthread_rwlock_init
阻塞申请读锁 pthread_rwlock_rdlock
非阻塞申请读锁 pthread_rwlock_tryrdlock
阻塞申请写锁 pthread_rwlock_wrlock
非阻塞申请写锁 pthread_rwlock_trywrlock
释放锁(无论是读锁还是写锁) pthread_rwlock_unlock
销毁读写锁 pthread_rwlock_destroy

抱歉!评论已关闭.