分类: LINUX
2009-08-10 15:47:12
互斥锁用于保护可能被多个线程同时访问到的共享变量。一个线程要访问一个共享变量的条件是持有该变量的互斥锁。如果一个线程试图给一个已经被其他线程上过锁的共享变量上锁,该线程会被挂起,直到互斥锁被解锁。互斥锁的数据类型为pthread_mutex_t,通常分为两种,一种是静态的,一种是动态的,静态的必需初始化为PTHREAD_MUTEX_INITIALIZER,动态的必需调用pthread_mutex_init进行初始化。
操作互斥锁的函数有(具体可参考man手册):
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
二、条件变量
条件变量是线程中的东西,就是等待某一条件的发生,类似于信号。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。条件变量类型为pthread_cond_t。操作条件变量的常用函数有(具体参考man手册):
int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr);
int pthread_cond_signal(pthread_cond_t *cond);
int pthread_cond_broadcast(pthread_cond_t *cond);
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime);
int pthread_cond_destroy(pthread_cond_t *cond);
三、一个例子
|