POSIX 线程2 信号量与互斥量
时间:2009-03-16 来源:jexpo
信号量常用的函数有
sem_open() ,sem_close() , sem_unlink()
sem_init(), sem_destroy()
sem_wait() sem_trywait() sem_post() sem_getvalue()
第一行的四个函数用于有名信号量,路径名表示,用于进程间同步
第二行的二个函数用于共享内存的信号量,用于线程间同步
第三行的四个函数是对信号量的操作,哪种情况下都要使用
我们只看基于共享内存的信号量,进程间同步最好用System V信号量
int sem_init(sem_t *sem, int pshared, unsigned int value);
第一个参数为信号量指针,第二个是它的共享值,常为0,表示进程内,用于线程同步,第三个为初始值
int sem_wait(sem_t *sem);
对信号量减1操作,信号量为-1时阻塞,sem_trywait是非阻塞版本
int sem_post(sem_t *sem);
对信号量加1操作
sem_wait与sem_post都是原子操作
int sem_destroy(sem_t *sem);
用于销毁信号量
#include <stdio.h> |
互斥mutex量常用的函数如下,其类型为pthread_mutex_t
int pthread_mutex_init(pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t *restrict attr);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
互斥量的创建与销毁函数
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
互斥量的操作函数
其使用方法与信号量semaphore类似
POSIX还有一种条件变量,本书中没有讲到,等回头学习unpv2时再作总结