我是靠谱客的博主 传统宝贝,最近开发中收集的这篇文章主要介绍linux c pthread_mutex_t 效率,linux中的C里面使用pthread_mutex_t鎖(轉載),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

轉自:http://blog.csdn.net/w397090770/article/details/7264315

linux下為了多線程同步,通常用到鎖的概念。

posix下抽象了一個鎖類型的結構:ptread_mutex_t。通過對該結構的操作,來判斷資源是否可以訪問。顧名思義,加鎖(lock)后,別人就無法打開,只有當鎖沒有關閉(unlock)的時候才能訪問資源。

它主要用如下5個函數進行操作。

1:pthread_mutex_init(pthread_mutex_t * mutex,const pthread_mutexattr_t *attr);

初始化鎖變量mutex。attr為鎖屬性,NULL值為默認屬性。

2:pthread_mutex_lock(pthread_mutex_t *mutex);加鎖

3:pthread_mutex_tylock(pthread_mutex_t *mutex);加鎖,但是與2不一樣的是當鎖已經在使用的時候,返回為EBUSY,而不是掛起等待。

4:pthread_mutex_unlock(pthread_mutex_t *mutex);釋放鎖

5:pthread_mutex_destroy(pthread_mutex_t *mutex);使用完后釋放

下面經典例子為創建兩個線程對sum從1加到100。前面第一個線程從1-49,后面從50-100。主線程讀取最后的加值。為了防止資源競爭,用了pthread_mutex_t 鎖操作。

#include#include#include#includetypedefstructct_sum

{intsum;

pthread_mutex_tlock;

}ct_sum;void * add1(void *cnt)

{

pthread_mutex_lock(&(((ct_sum*)cnt)->lock));inti;for( i=0;i<50;i++){

(*(ct_sum*)cnt).sum+=i;}

pthread_mutex_unlock(&(((ct_sum*)cnt)->lock));

pthread_exit(NULL);return 0;

}void * add2(void *cnt)

{inti;

cnt= (ct_sum*)cnt;

pthread_mutex_lock(&(((ct_sum*)cnt)->lock));for( i=50;i<101;i++)

{ (*(ct_sum*)cnt).sum+=i;

}

pthread_mutex_unlock(&(((ct_sum*)cnt)->lock));

pthread_exit(NULL);return 0;

}int main(void)

{inti;

pthread_t ptid1,ptid2;int sum=0;

ct_sum cnt;

pthread_mutex_init(&(cnt.lock),NULL);

cnt.sum=0;

pthread_create(&ptid1,NULL,add1,&cnt);

pthread_create(&ptid2,NULL,add2,&cnt);

pthread_mutex_lock(&(cnt.lock));

printf("sum %dn",cnt.sum);

pthread_mutex_unlock(&(cnt.lock));

pthread_join(ptid1,NULL);

pthread_join(ptid2,NULL);

pthread_mutex_destroy(&(cnt.lock));return 0;

}

最后

以上就是传统宝贝为你收集整理的linux c pthread_mutex_t 效率,linux中的C里面使用pthread_mutex_t鎖(轉載)的全部内容,希望文章能够帮你解决linux c pthread_mutex_t 效率,linux中的C里面使用pthread_mutex_t鎖(轉載)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部