• 互斥锁在线程中的使用


    1、概念:

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

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

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

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

    2、互斥锁使用:

    * 初始化   pthread_mutex_init

    * 加锁:     pthread_mutex_lock

    * 解锁:     pthread_mutex_unlock

    获得锁为止。

    代码如下:

    #include
    #include
    #include
    #include
    #include

    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;

     

  • 相关阅读:
    Go的unsafe.Pointer
    计算机毕业设计Java资源循环利用(源码+系统+mysql数据库+lw文档)
    PULP Ubuntu18.04
    Nosql数据库服务之redis
    【论文精读0】MVSNet系列论文详解-GC-Net
    第一讲之递归与递推下篇
    【Python+C#】手把手搭建基于Hugging Face模型的离线翻译系统,并通过C#代码进行访问...
    FPGA移位加三法
    全局封装loading 加载样式 vue3
    实施方法论
  • 原文地址:https://blog.csdn.net/qq_63626307/article/details/126508436