概述
轉自: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鎖(轉載)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复