线程(三) 互斥锁使用
#include
#include
#include
int sharedi = 0;
void increse_num(void);
pthread_mutex_t mutex;//互斥锁定义
int main(){
int ret;
pthread_t thrd1, thrd2, thrd3;
pthread_mutex_init(&mutex,NULL);//互斥锁初始化一般放在线程创立之前
ret = pthread_create(&thrd1, NULL, (void *)increse_num, NULL);
ret = pthread_create(&thrd2, NULL, (void *)increse_num, NULL);
ret = pthread_create(&thrd3, NULL, (void *)increse_num, NULL);
pthread_join(thrd1, NULL);
pthread_join(thrd2, NULL);
pthread_join(thrd3, NULL);
pthread_mutex_destroy(&mutex);//互斥锁销毁
printf("sharedi = %d\n", sharedi);
return 0;
void increse_num(void) {
long i,tmp;
for(i=0; i<=3000000; i++) //当运行很大的数据时不用互斥锁,极容易出错
pthread_mutex_lock(&mutex);//加锁
tmp = sharedi;
tmp = tmp + 1;
sharedi = tmp;
pthread_mutex_unlock(&mutex);//解锁 加锁与解锁过程中相当于是原子操作不会由于cpu时间片而中断中间的每
一步操作
}