一.函数
1.创建和销毁互斥量:
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t *restrict attr);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
Both return: 0 if OK, error number on failure
2.互斥量加锁与解锁:
#include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex); //加锁失败返回EBUSY
int pthread_mutex_unlock(pthread_mutex_t *mutex);
All return: 0 if OK, error number on failure
二.重点
1.如果互斥量是静态分配的,初始化可以直接赋值:PTHREAD_MUTEX_INITIALIZER。
三.例子:
线程方面省略了错误检查
#include <stdio.h> #include <pthread.h> int gvar = 0; pthread_mutex_t gmutex; void * thr_fn(void *arg) { int i,var; for(i=0;i<3;i++) { pthread_mutex_lock(&gmutex); var = gvar; var++; usleep(2000); gvar = var; pthread_mutex_unlock(&gmutex); } pthread_exit((void *)0); } int main() { pthread_t tid1,tid2; pthread_mutex_init(&gmutex,NULL); pthread_create(&tid1,NULL,thr_fn,NULL); pthread_create(&tid2,NULL,thr_fn,NULL); pthread_join(tid1,NULL); pthread_join(tid2,NULL); printf("gvar=%d\n",gvar); pthread_mutex_destroy(&gmutex); return 0; }
运行:
root@ubuntu1:~/11# ./a.out
gvar=6