多线程编程之线程同步相互排斥量


      Pthread是 POSIX threads 的简称,是POSIX的线程标准

         Pthread线程同步指多个线程协调地,有序地同步使用共享资源【C/C++多线程编程之五】pthread线程深入理解中讲述到,多线程共享进程资源,一个线程訪问共享资源须要一段完整地时间才干完毕其读写操作,假设在这段时间内被其它线程打断,就会产生各种不可预知的错误。协调线程按一定的规则,不受打搅地訪问共享资源,保证正确性,这便是线程同步的出发点。
       相互排斥量,是最简单的线程同步机制。也是最经常使用的同步策略。
       
 
     1.相互排斥量mutex


       相互排斥量是一种线程同步对象,“相互排斥”的含义是同一时刻仅仅能有一个线程获得相互排斥量。一个相互排斥量相应一个共享资源。相互排斥量状态:1.解锁状态意味着共享资源可用,2.加锁状态意味着共享资源不可用。

       一个线程须要使用共享资源时。使用thread_mutex_lock申请:1.当相互排斥量为解锁状态,则占用相互排斥量,并给相互排斥量加锁,占用资源(互相量为加锁状态,其它线程不能使用相互排斥量并等待相互排斥量变为解锁状态),2.假设相互排斥量为加锁状态,则线程等待,直到相互排斥量为解锁状态(其它线程使用完共享资源后会解锁相互排斥量,释放资源)。


 
      2.相互排斥量基本函数
 
      
 
      #include <pthread.h>

初始化相互排斥量:

        int pthread_mutex_init(pthread_mutex *mutex,

                                                const pthread_mutexattr_t* mutexattr);
 
      该函数第一个參数为一个相互排斥量指针。第二个參数为相互排斥量属性指针(一般设为NULL)。该函数将依照相互排斥量属性对相互排斥量进行初始化。
相互排斥量加锁:

 
      int pthread_mutex_lock(pthread_mutex *mutex);
 
      该函数申请一个相互排斥量并对其进行加锁,使该相互排斥量对其它线程不可用,让其它申请相互排斥量的线程等待。

相互排斥量解锁:

        int pthread_mutex_unlock(pthread_mutex *mutex);
 
      该函数对相互排斥量进行解锁操作,使该相互排斥量对其它线程能够。

销毁相互排斥量:

        int pthread_mutex_destroy(pthread_mutex *mutex);
 
      该函数销毁一个不再须要的相互排斥量,释放系统资源。
          
           3.牛刀小试
             
线程My_thread_1将共享资源字符串Share写成aaaaaaaa,线程My_thread_2则将其写成eeeeeeee。
       不启用相互排斥量的情况下。两个线程对共享资源的訪问是随机而且无规律,相互干扰打断,产生a和e混合的字符串,这显然不是我们期望的结果。
       启用相互排斥量(去掉凝视)情况下。相互排斥量机制其作用,两个线程同步协调地訪问共享资源Share。产生aaaaaaaa或eeeeeeee字符串。符合我们的预期。

         通过该演示样例,读者能够直观地感受到相互排斥量的作用,亲身体会相互排斥量机制,同一时候能让读者了解相互排斥量的内在原理。

【C/C++多线程编程之六】pthread相互排斥量的更多相关文章

  1. Linux线程相互排斥量--进程共享属性

    多线程中.在相互排斥量和 读写锁的 属性中.都有一个叫 进程共享属性 . 对于相互排斥量,查询和设置这个属性的方法为: pthread_mutexattr_getpshared pthread_mut ...

  2. Linux程序设计学习笔记----多线程编程线程同步机制之相互排斥量(锁)与读写锁

    相互排斥锁通信机制 基本原理 相互排斥锁以排他方式防止共享数据被并发訪问,相互排斥锁是一个二元变量,状态为开(0)和关(1),将某个共享资源与某个相互排斥锁逻辑上绑定之后,对该资源的訪问操作例如以下: ...

  3. Linux多线程同步之相互排斥量和条件变量

    1. 什么是相互排斥量 相互排斥量从本质上说是一把锁,在訪问共享资源前对相互排斥量进行加锁,在訪问完毕后释放相互排斥量上的锁. 对相互排斥量进行加锁以后,不论什么其它试图再次对相互排斥量加锁的线程将会 ...

  4. linux系统编程:线程同步-相互排斥量(mutex)

    线程同步-相互排斥量(mutex) 线程同步 多个线程同一时候訪问共享数据时可能会冲突,于是须要实现线程同步. 一个线程冲突的演示样例 #include <stdio.h> #includ ...

  5. 数据共享之相互排斥量mutex

    相互排斥量介绍 相互排斥量能够保护某些代码仅仅能有一个线程运行这些代码.假设有个线程使用相互排斥量运行某些代码,其它线程訪问是会被堵塞.直到这个线程运行完这些代码,其它线程才干够运行. 一个线程在訪问 ...

  6. μCOS-II系统之事件(event)的使用规则及Semaphore的相互排斥量使用方法

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wavemcu/article/details/27798493 ****************** ...

  7. WinCE C#程序,控制启动时仅仅能启动一个程序,使用相互排斥量来实现,该实现方法測试通过

    </pre><pre code_snippet_id="430174" snippet_file_name="blog_20140718_5_46349 ...

  8. 【C/C++多线程编程之十】pthread线程私有数据

    多线程编程之线程私有数据      Pthread是 POSIX threads 的简称.是POSIX的线程标准.         线程同步从相互排斥量[C/C++多线程编程之六]pthread相互排 ...

  9. android NDK编程:使用posix多线程与mutex相互排斥同步

    MainActivity.java 调用原生方法 posixThreads(int threads, int iterations) 启动线程 package com.apress.threads; ...

随机推荐

  1. ZJOI2008泡泡堂BNB

    1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1305  Solved: 676[Submit][Sta ...

  2. centos-nginx添加模块(无需重新编译)

    $ wget http://nginx.org/download/nginx-1.3.2.tar.gz $ .tar.gz #查看ngixn版本极其编译参数 $ /usr/local/nginx/sb ...

  3. 结构型:代理模式 Vs 适配器模式 Vs 门面模式(外观模式)

    先上UML图 代理模式: 适配器模式: 门面模式(外观模式): 打了例子……呃……举个比方 代理模式: 水浒街,西门庆看上潘金莲,想和她嘿咻嘿咻,但是自己有不能去找潘金莲去说,于是他找到了金牌代理人王 ...

  4. 4、什么构成了我们Android应用程序?(七大件)

    一.应用程序四大组件 [Activity] Activity是Android应用程序的一个界面,可以通过这个界面查看联系人,打电话戒玩游戏. b. 一个应用程序通常包含多个Activity. c. A ...

  5. 不要62(HDU 2089数位dp入门)

    题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 分析:dp[i][f]数字表示不含 4 和 62的前提下,剩余长度为 len ,首位是否为 6 的个数. #include < ...

  6. Mysql的函数使用方法

    今天有点临时需求要计算一张表的结果,不想写代码,想到了mysql的自定义函数.碰到了很多问题,为了方便一下使用,在此记录一下. 需求:一张表中,有比分,需要查询出比赛id和比赛结果. 分析:     ...

  7. 卸载redhat6.5的yum,安装centos6的yum,配置第三方yum源

    **redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,重启安装其他yum源,再配置其他源.** 本文包括配置本地源及第三方源.第三方源包括:网 ...

  8. [假期总结]Self

    8月底返校,这一周也没有勤学苦练.假期3周的时间学习了nodejs. 1.nodejs的学习 学习了一本书上的例程,搭建了个博客.这种程度等于是能够动手开发的阶段,前路还很漫长. 2.个人网站的建设 ...

  9. 挑战树莓派:谁才是Geek最爱的开发板?

    树莓派(Raspberry Pi)是一块跟信用卡差不多大小的开发板,它的初衷是以低廉的硬件和开源软件扶持一些落后地区的电脑科学教育.由于它在性能和价格方面有一个很好的平衡点,所以很多硬件玩家也想买一个 ...

  10. nyoj 14 会场安排问题

    会场安排问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工 ...