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;
    
    }
  • 相关阅读:
    远离热闹
    漫步泰晤士小镇
    逛2011上海宠物大会(多图)
    iphone 4入手一周使用心得与感受
    章鱼帝
    南非世界杯赛程表下载(Excel版)
    相亲记
    再评富士康悲剧
    上海的朋友出门注意
    有感于车船税
  • 原文地址:https://www.cnblogs.com/edver/p/7154457.html
Copyright © 2011-2022 走看看