zoukankan      html  css  js  c++  java
  • 互斥锁Demo

    #include <stdio.h>
    
    #include <pthread.h>
    
    pthread_t work1Id;
    
    pthread_t work2Id;
    
    int work1Ret = 1;
    
    int work2Ret = 2;
    
    pthread_cond_t cond_ready = PTHREAD_COND_INITIALIZER;
    
    pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
    
    int number = 0;
    
    void* Work1(void* args)
    
    {
    
        int i = 0;
    
        printf("I am work%d
    ", *((int*)args));
    
        for(i = 0; i < 10; i++)
    
        {
    
            pthread_mutex_lock(&mutex);
    
            number++;
    
            if(number%2==0)
    
            {
    
                printf("I am work%d, Finish
    ", *((int*)args));
    
                pthread_cond_signal(&cond_ready);
    
                sleep(1);
    
            }
    
            pthread_mutex_unlock(&mutex);
    
            printf("I am work%d, number = %d and unlock 
    ", *((int*)args), number);
    
            sleep(1);
    
         }
    
        return &work1Ret;
    
    }
    
    void* Work2(void* args)
    
    {
    
        printf("I am work%d
    ", *((int*)args));
    
        while(number <10)
    
    {
    
        pthread_mutex_lock(&mutex);
    
        if(number <= 10)
    
        {
    
            pthread_cond_wait(&cond_ready, &mutex);
    
            printf("I am work%d, number = %d receive SIG
    ", *((int*)args), number);
    
        }
    
            pthread_mutex_unlock(&mutex);
    
        }
    
        return &work2Ret;
    
    }
    
    int main()
    
    {
    
        int args1 = 1;  
    
       int args2 = 2;
    
        void* work1Ret = NULL;
    
        void* work2Ret = NULL;
    
        pthread_create(&work1Id, NULL, Work1, &args1);
    
        pthread_create(&work2Id, NULL, Work2, &args2);
    
        pthread_join(work1Id, &work1Ret);
    
        if(work1Ret != NULL)
    
        {  
    
           printf("work1Ret = %d
    ", *((int*)work1Ret));
    
        }
    
        pthread_join(work2Id, &work2Ret);
    
        if(work2Ret != NULL)
    
        {   
    
          printf("work2Ret = %d
    ", *((int*)work2Ret));  
    
       }
    
        return 0;
    
    }
  • 相关阅读:
    11月2号
    2020.9.22 (Java测试)
    2020.8.30 + 每周周报(8)
    2020.8.31
    2020.8.29
    2020.9.23
    伪分布式hbase从0.94.11版本升级stable的1.4.9版本
    python 将列表(也可以是file.readlines())输出多个文件
    hbase0.94.11版本和hbase1.4.9版本的benchamark区别
    idea 配置
  • 原文地址:https://www.cnblogs.com/edver/p/7154457.html
Copyright © 2011-2022 走看看