linux多线程编程1

多个线程都需要访问的共享变量,就像两个计算机都访问的双口存储器变量,如果不进行控制有可能会访问出现错误。双口存储器会出现单个访问冲突问题,多线程不会,但是读修改写的原子操作问题两种都会出现。下面就是例子程序,可以通过注释mutex_lock和mutex_unlock看看原子操作出问题的情况,加上锁可以看到正确的情况。

   /************************************** 
   *文件说明:线程冲突 
   *作者:linchao100 
   *创建时间:2022年01月13日
   *开发环境:ubuntu/g++ v6.3.0 
   ****************************************/ 
   #include<stdio.h> 
   #include<stdlib.h> 
   #include<pthread.h> 
  
 int global = 0;//定义全局变量 
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;//定义全局锁并初始化
 void *pthread_add(void *){
     int i = 80000;//数据太小,线程发生冲突的概率比较小
     while(i--)
     {
         int tmp = global;
         printf("thread:%d,%d\n",pthread_self(),global);
		  pthread_mutex_lock(&lock);//加锁
         global  ++;
		 pthread_mutex_unlock(&lock);//解锁
     }
     //printf("\n");
     return (void *)0 ;
 }
 int main()
 {
     pthread_t tid1;
     pthread_t tid2;
     pthread_create(&tid1,NULL,pthread_add,NULL);//创建线程1
     pthread_create(&tid2,NULL,pthread_add,NULL);//创建线程2
     pthread_join(tid1,NULL);//等待线程1
     pthread_join(tid2,NULL);//等待线程2
     printf("the global is %d\n",global);
     return 0;
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值