linux 多线程(一)条件变量

#include <stdlib.h>    
#include <stdio.h>    
#include <pthread.h>    
#include <errno.h>     
 
int gnum = 0;  
int gsub = 100;
pthread_mutex_t mutex;  
pthread_cond_t  cond; //条件变量
 
void pthread_func_1 (void);     
void pthread_func_2 (void);     
 
int main (void)     
{     
    pthread_t pt_1 = 0;     
    pthread_t pt_2 = 0;     
    int ret = 0;     
     
    pthread_mutex_init (&mutex, NULL); //默认情况下 互斥初始化后是解锁状态可用  
    pthread_cond_init(&cond,NULL); //
    //pthread_cond_init(指向pthread_cond_t的指针,属性设置<NULL>默认属性)
   
    ret = pthread_create (&pt_1, NULL, (void *)pthread_func_1, NULL);        
    if (ret != 0)     
        printf("pthread_1_create");     
    ret = pthread_create (&pt_2,  NULL, (void *)pthread_func_2, NULL);       
    if (ret != 0)               
      printf("pthread_2_create");          
 
    pthread_join (pt_1, NULL);     
    pthread_join (pt_2, NULL);     
    printf ("main programme exit!/n");    
    return 0;     
}     

 void pthread_func_1 (void)     
{     
    int i = 0;     
    printf ("pthread1 start running!\n");  
    while(gnum <= 100)     
    { 
       usleep (100);         
        pthread_mutex_lock(&mutex);
        while (gnum == 50)
        {
          printf("supend thread1 at gnum=50!!!\n");
          pthread_cond_wait(&cond, &mutex);
          gnum++;
       } 
        gnum++;  
        printf ("gnum=:%d\n",gnum);  
        pthread_mutex_unlock(&mutex); /*释放互斥锁*/   
    }     
}     

 void pthread_func_2 (void)     
{     
    int i=0;
    printf ("pthread2 start running!\n");
    while (gsub >= 0)
    {  
       usleep (100)  ; 
        pthread_mutex_lock(&mutex);//mutex被锁住后,线程在此被挂起,等待mutex变为解锁状态后,获得互斥锁,继续执行
        gsub--;  
        printf ("gsub=:%d\n",gsub);   
        if (gsub == 20)   
        {
     printf("resume thread1 at gsun = 20\n");
     pthread_cond_signal(&cond);
     }
        pthread_mutex_unlock(&mutex);   
    }       
    pthread_exit (0);     
}   

posted on 2012-06-26 18:21  龙沙宝石  阅读(224)  评论(0编辑  收藏  举报

导航