IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育

Hi,歡迎來到嵌入式培訓高端品牌 - 華清遠見教育科技集團<北京總部官網>,專注嵌入式工程師培養15年!
當前位置: > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > 線程解析(三)
線程解析(三)
時間:2016-12-30作者:華清遠見

前面我們說了線程的創建和撤銷,這里我們說一下線程間的同步的問題。

當同一個進程中存在多個線程的時候,多個線程共享相同的內存,確保每個線程能夠看到一致的數據視圖,如果每個線程中都不會讀取或修改共同享有的變量,就不會存在一致性的問題,同樣如果共享變量時只讀的也就不會存在這個問題。但是,當某個線程可一個修改變量,而其他的線程去讀取或修改這個變量的時候,就需要進行線程間的同步,確保他們訪問變量的內容時不會訪問到無效的數據。

這里介紹一種實現同步的方法:互斥量

互斥鎖本質上是一把鎖,在訪問共享資源的時候對互斥量進行加鎖,訪問結束后解鎖。在這里我們說一下如何去操作互斥鎖。

1、 創建和撤銷

互斥量用pthread_mutex_t數據類型來表示,在使用之前必須對其進行初始化,用完之后釋放內存。互斥量初始化可以用PTHREAD_MUTEX_INITIALIZER來初始化(靜態初始化),亦可以使用pthread_mutex_init函數來實現,這種方法動態的為互斥量分配內存,使用后必須使用pthread_mutex_destroy來釋放內存單元。下面是這些函數的原型:
        pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
        int pthread_mutex_init(pthread_mutex_t *restrict mutex,
        const pthread_mutexattr_t *restrict attr);
        int pthread_mutex_destroy(pthread_mutex_t *mutex);

2、 鎖操作

鎖操作主要包括加鎖pthread_mutex_lock()、解鎖pthread_mutex_unlock()和測試鎖pthread_mutex_trylock()三個。通過pthread_mutex_lock對互斥量加鎖,這里需要獲得鎖,如果無法獲得鎖則調用線程將阻塞到其他線程調用pthread_mutex_unlock對互斥量解鎖。
        int pthread_mutex_lock(pthread_mutex_t *mutex);
        int pthread_mutex_trylock(pthread_mutex_t *mutex);
        int pthread_mutex_unlock(pthread_mutex_t *mutex);

如果線程不希望被阻塞,則可以調用pthread_mutex_trylock嘗試對互斥量進行加鎖,當互斥量沒有被加鎖,則函數返回0,并鎖住互斥量,否則會失敗,返回EBUSY.

3、 示例

下面我們用一個例程說明一下這些函數的使用。

#include <stdio.h>
        #include <pthread.h>

pthread_mutex_t mutex;

void *thread_a(void *arg)
        {
                printf("thread a enter\n");
                pthread_mutex_lock(&mutex);
                printf("mutex lock\n");
                sleep(10);
                pthread_mutex_unlock(&mutex);
                printf("mutex unlock\n");
        }

void *thread_b(void *arg)
        {
                printf("thread b enter\n");
                while(pthread_mutex_trylock(&mutex))
                {
                        printf("pthread trylock\n");
                        sleep(1);
                }
                printf("mutex lock\n");
                pthread_mutex_unlock(&mutex);
                printf("mutex unlock\n");
        }

int main(int argc, char **argv)
        {
                pthread_t tid_a,tid_b;
                int err;

        if(pthread_mutex_init(&mutex, NULL) != 0)
                {
                        perror("pthread_mutex_init");
                }

        err = pthread_create(&tid_a,NULL,thread_a,NULL);
                if(err < 0)
                {
                        perror("pthread_create thread_a");
                }
                sleep(1);
                err = pthread_create(&tid_b,NULL,thread_b,NULL);
                if(err < 0)
                {
                        perror("pthread_create thread_a");
                }

        sleep(20);
                printf("the main close\n");
                return 0;
        }

結果:
        thread a enter
        mutex lock
        thread b enter
        pthread trylock
        pthread trylock
        pthread trylock
        pthread trylock
        pthread trylock
        pthread trylock
        pthread trylock
        pthread trylock
        pthread trylock
        mutex unlock
        mutex lock
        mutex unlock
        the main close

由這里的結果可以看出mutex的用處及幾個相關函數的使用方法。

 
發表評論
評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
主站蜘蛛池模板: 普利塞HS穿刺活检针-巴德穿刺活检针-美创爱琅Argon活检针同轴针-山东瑞玺源 | 阴_阳离子聚丙烯酰胺价格_聚合氯化铝厂家_聚合硫酸铁-巩义市亿洋水处理材料有限公司 | 无人叉车|智能无人叉车|智能AGV叉车|激光叉车AGV厂家_江西丹巴赫机器人股份有限公司 | 上海安防网-上海安全防范报警协会| 免费的PPT幻灯片演示制作软件,动画视频及课件制作软件 - Focusky万彩演示大师官网 | 磨粉机_上海磨粉机_雷蒙磨粉机_超细磨粉机_磨粉机价格-上海山卓重工机械有限公司 | 览众房车,房车, 房车厂家, 房车价格, 房车图片,, 四驱房车, 皮卡房车, 越野房车, 依维柯房车, 国产房车, 自动挡房车, | 气体灭火安装,气体灭火系统安装,七氟丙烷灭火系统安装,消防气体灭火控制系统 | 节能设备|余热回收|蒸汽压缩机|脱硝-河北耀一节能设备制造有限责任公司 | 中国家居资讯网-家居建材-知名十大品牌-著名品牌资讯网 | 全自动视觉点胶机|在线式点胶机|精密点胶阀设备厂家-杭州迈伺特科技有限公司 | 烟台金海药业有限公司 | 清扫器-聚氨酯清扫器-合金清扫器-四连杆自动纠偏-机械纠偏-锥辊纠偏-衡水涌泉机械科技有限公司 | 亚洲一区日韩一区欧美一区a,中文字幕乱妇无码AV在线,欧美日韩免费在线观看,国产精品一区二区三区免费,日韩精品免费一线在线观看,日韩一本在线,国产呦精品一区二区三区下载,国产日韩精品一区二区在线观看,欧美日韩高清一区二区三区,日韩在线免费观看视频,欧美日韩一区在线观看 | 涡流探伤仪-超声波探伤仪-上海仓信电子科技有限公司 | 展馆展厅设计_数字多媒体展厅_3D全息投影_三维动画制作_企业宣传片|深圳市华南数字科技有限公司 斩天手游网_高质量手机游戏下载中心 | 泰州阳光会计服务有限公司官网-泰州公司注册|泰州代理记账 | 健力普医疗-半导体激光治疗仪,红外偏振光治疗仪,近红外线治疗仪-独家功能,光疗典范 | 买化工,找万创!泉州万创化工贸易有限公司 | 收银系统_收银机_pos收款机_门店管理系统-客如云 | 重庆污水处理设备_废气处理设备_纯净水设备-山艺环保 | 卧式球磨机_干法球磨机_尼龙球磨机-无锡市少宏粉体科技有限公司 卧螺离心机-固液分离机-台州春鼎机械制造有限公司 | 湿电电源,静电除尘电源,电捕焦电源-山东仕瑞电气科技有限公司 | 郑州建网站,郑州做网站,郑州网站建设,郑州网站制作,郑州高端定制网站,郑州APP开发 | 直冷式块冰机|片冰机|块冰机|制冰机厂家|深圳市冰之星制冷科技有限公司 | 随州市东正专用汽车有限公司 | 江苏华海诚科新材料有限公司、连云港华海诚科新材料有限公司、连云港新材料 | 学校洗碗机-郑州洗碗机厂家-商用洗碗机-郑州旭申环保科技有限公司 | 戒网瘾学校-陕西正规戒网瘾-叛逆青少年教育学校-重生教育官网 | 津成电线电缆价格,天津津成线缆,津成线缆销售电话,天津津成线缆批发电话-天津市津成电线电缆有限公司 | 射频导纳物位开关|雷达液位计|安全光栅光幕传感器|音叉料位开关|两级跑偏开关|双向拉绳开关|纵向撕裂保护装置-山东卓信机械有限公司 | 一体化净水器-一体化净水设备-集成式|装配式模块化净水设备-山东奕博环境 | 液压提升设备,液压顶升装置,钢内筒提升设备,储罐液压顶升_沧州鼎恒液压机械制造有限公司 | 箱式电炉,箱式烧结炉,箱式马弗炉,箱式实验炉,高温箱式电阻炉,箱式加热炉,箱式退火炉,箱式真空气氛炉洛阳研博炉业有限公司 | 真空机器人维修_晶圆机械手保养_半导体机械臂维修_面板机器人保养_AMHS改造-广州市广科智能技术有限公司 | 佳龙食品集团|高端辣条领导品牌| 全自动码垛机械手,码垛机器人,拆包机,缠绕机,开箱封箱装箱机厂家-山东昊宇自动化设备有限公司 | 熊猫家装-装修公司,上海装修、室内设计、家装、别墅装修、办公室装修、全屋定制就上熊猫家装 | 新硕考研_新硕寄宿考研-升学路上的规划师【官网】 | 组合包装箱,折叠包装箱,烟台木箱,烟台包装箱-烟台顺达包装有限责任公司 | 山东邹平华强无纺布有限公司 |