微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

互斥锁在线程中的使用

1、概念:

引入互斥(mutual exclusion)锁的目的是用来保证共享数据操作的完整性。

互斥锁主要用来保护==临界资源==

每个临界资源都由一个互斥锁来保护,任何时刻最多只能有一个线程能访问该资源

线程必须先获得互斥锁才能访问临界资源,访问完资源后释放该锁。如果无法获得锁,线程会阻塞直到

2、互斥锁使用:

* 初始化   pthread_mutex_init

* 加锁:     pthread_mutex_lock

* 解锁:     pthread_mutex_unlock

获得锁为止。

代码如下:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>

int value = 0;
int count1, count2;
pthread_mutex_t mutex;

void *thread_func1(void *arg)
{
    while (1)
    {
        value++;
        pthread_mutex_lock(&mutex); //加锁
        count1 = valuea;
        count2 = value;
        pthread_mutex_unlock(&mutex); //解锁
    }
}

void *thread_func2(void *arg)
{
    while (1)
    {
        pthread_mutex_lock(&mutex);
        if (count1 != count2)
            printf("count = %d, count2 = %d\n", count1, count2);
        pthread_mutex_unlock(&mutex);
    }
}

int main(int argc, char *argv[])

    pthread_t thread1, thread2;
    int err;
    //初始化互斥锁
    pthread_mutex_init(&mutex, NULL);

    err = pthread_create(&thread1, NULL, thread_func1, NULL);
    if (err != 0)
    {
        fprintf(stderr, "pthread_create1: %s\n", strerror(err));
        return -1;
    }
    
    err = pthread_create(&thread2, NULL, thread_func2, NULL);
    if (err != 0)
    {
        fprintf(stderr, "pthread_create2: %s\n", strerror(err));
        return -1;
    }
    while (1)
        sleep(1);

    return 0;

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐