现在的位置: 首页 > 综合 > 正文

1.4 线程同步–互斥量

2014年01月25日 ⁄ 综合 ⁄ 共 1048字 ⁄ 字号 评论关闭

目录

一.函数
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

抱歉!评论已关闭.