线程同步

时间:2020-06-13 01:34:54   收藏:0   阅读:55

互斥锁(互斥量)

创建互斥锁

pthread_mutex_t mutex;

初始化互斥锁

pthread_mutex_init(pthread_mutex_t* mutex,
  const pthread_mutexattr_t* attr
);

销毁互斥锁

pthread_mutex_unlock(pthread_mutex_t *mutex);

加锁

//如果加锁的时候发现锁已经被锁上了,线程会一直阻塞在这个位置
pthread_mutex_lock(pthread_mutex_t *mutex);

//尝试加锁,失败返回,不阻塞
pthread_mutex_trylock(pthread_mutex_t *mutex);

解锁

pthread_mutex_unlock(pthread_mutex_t *mutex);

实例

技术分享图片
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>

#define MAX 10000

int number;

//创建一把互斥锁
pthread_mutex_t mutex;

void* funcA_num(void* arg)
{
        int i;
        for(i=0; i<MAX; i++)
        {
                //加锁
                pthread_mutex_lock(&mutex);
                int cur = number;
                cur++;
                number = cur;
                printf("Thread A, id = %lu, number = %d\n", pthread_self(), number);
                //解锁
                pthread_mutex_unlock(&mutex);
                usleep(10);
        }

        return NULL;
}

void* funcB_num(void* arg)
{
        int i;
        for(i=0; i<MAX; i++)
        {
                //加锁
                pthread_mutex_lock(&mutex);
                int cur = number;
                cur++;
                number = cur;
                printf("Thread B, id = %lu, number = %d\n", 
pthread_self(), number);
                //解锁
                pthread_mutex_unlock(&mutex);
                usleep(10);
        }

        return NULL;
}

int main(int argc, const char* argv[])
{
        pthread_t p1, p2;

        //初始化互斥锁
        pthread_mutex_init(&mutex, NULL);

        //创建两个子进程
        pthread_create(&p1, NULL, funcA_num, NULL);
        pthread_create(&p2, NULL, funcB_num, NULL);

        //阻塞,回收资源
        pthread_join(p1, NULL);
        pthread_join(p2, NULL);

        //释放互斥锁资源
        pthread_mutex_destroy(&mutex);

        return 0;
}
View Code

 

原文:https://www.cnblogs.com/xumaomao/p/13110990.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!