1.fetch (获取)
2.对于多线程的程序的访问冲突问题,,引入互斥锁来解决
3.初始化和销毁
函数原型 :#include <pthread.h>
int pthread_mutex_destroy(pthread_mutex_t *mutex);
int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t * restrict attr);
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
加锁和解锁
函数原型 : #include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
返回值 :成功返回0 ,失败返回错误号
应尽量使用pthread_mutex_trylock调用代替pthread_mutex_lock调用,以免死锁
4. condition variable 条件变量
初始化与销毁
函数原型 : #include <pthread.h>
int pthread_cond_destroy(pthread_cond_t *cond);
int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t * restrict attr);
pthread_cond_t cond = PTHREAD_COND_INITIALIZER
返回值 : 成功返回0 , 失败返回 错误号
函数原型 : #include <pthread.h>
int pthread_cond_timedwait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime);
int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_cond_t *restrict mutex);
int pthread_cond_broadcast(pthread_cond_t *cond);
int pthread_cond_signal(pthread_cond_t *cond);
返回值 : 成功返回0, 失败返回错误号
一个线程调用pthread_cond_wait调用的三步
释放mutex
阻塞等待
当被唤醒时, 重新获得Mutex并返回
5.semaphore(旗语, 信号量)
表示可用资源的数量
函数原型 ; #include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
int sem_wait(sem_t *sem); 减1
int sem_trywait(sem_t *sem);
int sem_post(sem_t *sem); 加1
int sem_destroy(sem_t *sem);
pshared = 0 : 表示 : 信号量用于同一进程的线程间同步