您的位置:首页 > 运维架构 > Linux

Linux多线程编程之线程互斥锁

2017-12-08 08:50 357 查看
#include <stdio.h>
#include <pthread.h>

#include <semaphore.h>
#include <stdlib.h>
//Linux多线程编程之线程互斥锁
//保证共享数据操作的完整性。

/*
互斥锁:线程将互斥。
互斥锁变量
//初始化互斥锁
int  pthread_mutex_init(pthread_mutex_t  *mutex, const pthread_mutex‐
attr_t *mutexattr);
参数1:互斥锁变量,默认快速互斥锁 PTHREAD_MUTEX_INITIALIZER;
参数2:互斥锁属性 一般NULL

//加锁:阻塞函数
int pthread_mutex_lock(pthread_mutex_t *mutex);

//非阻塞加锁:
int pthread_mutex_trylock(pthread_mutex_t *mutex);

//解锁
int pthread_mutex_unlock(pthread_mutex_t *mutex);

//销毁互斥锁
int pthread_mutex_destroy(pthread_mutex_t *mutex);
*/

static  int val =100;
//快速互斥锁:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

//读线程执行函数
void *pthread_read(void *arg)
{
printf("pthrea 1 run...\n");
int i =2;

while(1){
//加锁
pthread_mutex_lock(&mutex);

printf("thread read val  =%d\n",val);

if(val ==105){
pthread_mutex_unlock(&mutex);
break;
}

//解锁
pthread_mutex_unlock(&mutex);

sleep(2);
}

pthread_exit(NULL);
return NULL;
}

//写线程执行函数
void  *pthread_write(void *arg)
{
printf("pthread write run..\n");
while(1){
//加锁
pthread_mutex_lock(&mutex);

val++;
printf("pthread write val =%d\n",val);

if(val ==105){
printf("write exit\n");
pthread_mutex_unlock(&mutex);
break;
}

//解锁
pthread_mutex_unlock(&mutex);

sleep(1);
}

pthread_exit(NULL);
return NULL;
}

int main(void)
{
printf("main thread tid = 0x%x\n",pthread_self());

//初始化互斥锁
pthread_mutex_init(&mutex,NULL);

//创建写线程
pthread_t tid2;
pthread_create(&tid2,NULL,pthread_write,NULL);

//创建读线程
pthread_t tid1;
pthread_create(&tid1,NULL,pthread_read,NULL);

//阻塞等待子线程结束,回收子线程结束8kb物理内存
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
printf("child pthread exit\n");

//  sleep(8);
printf("main pthread exit\n");
pthread_exit(NULL);  //结束主线程

return 0;
}

/*
$ ./a.out
main thread tid = 0xb758c6c0
pthrea 1 run...
thread read val  =100
pthread write run..
pthread write val =101
pthread write val =102
thread read val  =102
pthread write val =103
pthread write val =104
thread read val  =104
pthread write val =105
write exit
thread read val  =105
child pthread exit
main pthread exit
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐