温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

[Linux线程]线程的同步--使用互斥锁完成线程同步

发布时间:2020-07-19 11:40:29 来源:网络 阅读:689 作者:银河星君 栏目:编程语言
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

pthread_mutex_t mutex;    //定义一个互斥量             
int x;                    //定义一个全局变量                                
//这是线程1的入口函数
void threaddeal1(void)                
{
  while(x>0)              //如果X>0
  {
    pthread_mutex_lock(&mutex);        //对互斥量进行加锁操作       
    printf("线程1正在运行: x=%d \n",x); //输出当前的x值
    x--;                                //将x的值-1
    pthread_mutex_unlock(&mutex);       //对互斥两进行开锁操作
    sleep(1);                           //休眠1秒
  }
  pthread_exit(NULL);                   //进程退出
}
//这是线程2的入口函数,线程2和线程1的操作完全相同
void threaddeal2(void) 
{
  while(x>0)
  {
    pthread_mutex_lock(&mutex); 
    printf("线程2正在运行: x=%d \n",x);
    x--;
    pthread_mutex_unlock(&mutex);
    sleep(1);
  }
  pthread_exit(NULL);
}
//这是主函数
int main(int argc,char *argv[])
{
  pthread_t threadid1,threadid2;                        
  int ret;
  ret = pthread_mutex_init(&mutex,NULL);   //初始化互斥锁
  if(ret != 0)
  {
    printf ("初始化互斥锁失败.\n"); 
    exit (1);
  }
  x = 10;     //给全局变量赋初始化值                                
  ret = pthread_create(&threadid1, NULL, (void *)&threaddeal1, NULL);  //创建线程1    
  if(ret != 0)
  {
    printf ("创建线程1失败.\n");
    exit (1);
  }
  ret = pthread_create(&threadid2, NULL, (void *)&threaddeal2, NULL);  //创建线程2   
  if(ret != 0)
  {
    printf ("创建线程2失败.\n");
    exit (1);
  }
  pthread_join(threadid1, NULL); 
  pthread_join(threadid2, NULL);    //阻塞线程1和线程2
  return (0);
}


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI