当前位置 博文首页 > 李柱明:【linux】系统编程-6-POSIX标准下的信号量与互斥锁
原文
#include semaphore.h
int sem_init(sem_t *sem, int pshared, unsigned int value);
int sem_destroy(sem_t *sem);
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_post(sem_t *sem);
int sem_init(sem_t *sem, int pshared, unsigned int value);
:初始化信号量int sem_destroy(sem_t *sem);
:销毁信号量int sem_wait(sem_t *sem);
:P操作,带阻塞。成功返回0,失败返回-1int sem_trywait(sem_t *sem);
:P操作,不阻塞。成功返回0,失败返回EAGAINint sem_post(sem_t *sem);
:V操作。成功返回0,失败返回-1sem.[信号量名字]
,创建该信号量成功后,系统会将其存放在 /dev/shm#include semaphore.h
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_post(sem_t *sem);
int sem_close(sem_t *sem);
int sem_unlink(const char *name);
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);
:打开或创建一个有名信号量int sem_wait(sem_t *sem);
:P操作,带阻塞。成功返回0,失败返回-1int sem_trywait(sem_t *sem);
:P操作,不阻塞。成功返回0,失败返回EAGAINint sem_post(sem_t *sem);
:V操作。成功返回0,失败返回-1int sem_close(sem_t *sem);
:关闭信号量,表示当前进程取消对该信号量的使用权。不影响其它进程/线程对其继续使用。int sem_unlink(const char *name);
:删除信号量,其它进程/线程也访问不了了。semctl()、semget() 和 semop()
#include <pthread.h>
pthread_mutex_t fastmutex = PTHREAD_MUTEX_INITIALIZER; // 快速互斥锁
pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; // 递归互斥锁
pthread_mutex_t errchkmutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP; // 检错互斥锁
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);
int pthread_mutex_lock(pthread_mutex_t *mutex);
:获取互斥锁并上锁,具有阻塞功能int pthread_mutex_lock(pthread_mutex_t *mutex);
:获取互斥锁并上锁,不阻塞,发现锁被占用后会返回EBUSY错误int pthread_mutex_unlock(pthread_mutex_t *mutex);
:解锁并释放互斥锁int pthread_mutex_destroy(pthread_mutex_t *mutex);
:销毁互斥锁 * 野火