Linux多线程中共享资源的互斥(互斥锁示例pthread_mutex_t) - 技术分享 - 志盟培训
首页技术分享 Linux多线程中共享资源的互斥(互斥锁示例pthread_mutex_t)

Linux多线程中共享资源的互斥(互斥锁示例pthread_mutex_t)

更新时间:2017-05-19      作者:丁老师       阅读:186

在多线程应用中,所有的线程都是共享资源,线程时并发运行的,此时,就有可能发导致多个线程同时访问操作共享资源。假如有AB两个线程,A线程读共享资源,B线程写共享资源,就会发生A线程读取的共享资源一部分被B线程修改过一部分没有修改,那么在这种情况下就是一个数据的混乱,通常数据要么是原始数据,要么是经过完成修改后的数据,而多线程的并发行就可能产生访问的资源还没有被全部修改完毕,就被读取了。


经典案例:有两个编号为1,2的线程,共同售票100张,票号从1到100,

输出每个线程所售票的票号。


#include<stdio.h>

#include<pthread.h>

#include<assert.h>

#include<unistd.h>

#include<stdlib.h>


pthread_mutex_tmutex;//定义互斥锁

int tickets=1;


void*saleTicket(void*argv)

{

        int id=(int)argv;

        while(1)

       {

                //pthread_mutex_lock(&mutex);//上锁

                if(tickets<=100)

                {

                      usleep(5);

                      printf("第%d窗口售票:%d号\n",id,tickets++);

                 // pthread_mutex_unlock(&mutex);//解锁

                 }

                 else

                 {

                         //pthread_mutex_unlock(&mutex);//解锁

                         break;

                  }

        }

        pthread_exit(NULL);

}


int main()

{

     pthread_t pth1,pth2;

     int ret;


     //初始化互斥锁

     pthread_mutex_init(&mutex,NULL);


     ret=pthread_create(&pth1,NULL,saleTicket,(void*)1);

     assert(ret==0);

     ret=pthread_create(&pth2,NULL,saleTicket,(void*)2);

     assert(ret==0);


     pthread_join(pth1,NULL);

     pthread_join(pth2,NULL);

     pthread_mutex_destroy(&mutex);//销毁互斥锁

     return 0;

}

如果将代码中的互斥锁的上锁和解锁去掉(usleep是为了增加出错的几率),就会可能出现票号101的情形,这种错误是及其致命的,不允许发生。此时使用互斥锁就会解决这种问题所带来的错误。

在线报名

志盟科技上海招聘

在线报名 联系我们

志盟科技深圳招聘

在线报名 联系我们

志盟科技北京招聘

在线报名 联系我们
联系我们

咨询热线:

咨询 QQ:517578         

就业学员

  • 姓名:郭凡凡 
    院校:阜阳师范学院
    就职:佳戴
    职位:软件工程师
    月薪:10000

  • 姓名:陈祥龙 
    院校:中北大学
    就职:美囤妈妈
    职位:软件工程师
    月薪:9000

  • 姓名:陈建伟
    院校:南昌航空大学
    就职:SONY
    职位:嵌入式工程师
    月薪:8000

×
×
  • *真实姓名
  • *联系手机
  • *上课地址
  •    QQ号码

温馨提示:请保持手机畅通,咨询老师将为您提供专属的一对一报名服务。

×
  • *真实姓名
  • *联系手机
  • *联系邮箱
  • * QQ号码

温馨提示:请保持手机畅通,咨询老师将为您提供专属的一对一的服务。

本站由 宽敬科技——创新企业的建站运营顾问 提供支持