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 */
相关文章推荐
- linux多线程编程---线程同步之互斥锁
- linux 下多线程编程以及线程接口的使用
- Linux下的TCP/IP编程----线程及多线程服务端
- linux基础编程 多线程中的互斥锁 pthread_mutex_lock
- 【PTHREAD】linux 多线程编程---Mutex实现Service线程和work线程
- linux 多线程编程 同步与互斥
- 一个例子展开,介绍Linux下面线程的操作、多线程的同步和互斥。
- Linux下多线程编程之互斥锁、条件变量、信号量
- linux 多线程编程 之 信号量互斥同步
- 介绍Linux下面线程的操作、多线程的同步和互斥
- linux 系统编程-学习笔记9--线程的同步互斥锁、读写锁/select/poll
- linux多线程编程——同步与互斥
- linux网络编程之posix 线程(三):posix 匿名信号量与互斥锁 示例生产者--消费者问题
- Linux多线程编程--同步与互斥
- 【原创】《Linux高级程序设计》杨宗德著 - Linux多线程编程 - 线程退出与等待 分类: Linux --- 应用程序设计 2014-11-19 18:04 64人阅读 评论(0) 收藏
- linux 多线程编程 之 信号量互斥同步
- linux 多线程编程 之 信号量互斥同步
- 【原创】《Linux高级程序设计》杨宗德著 - Linux多线程编程 - 线程退出与等待
- 【原创】《Linux高级程序设计》杨宗德著 - Linux多线程编程 - 线程属性控制 分类: Linux --- 应用程序设计 2014-11-30 20:54 68人阅读 评论(0) 收藏
- linux程序设计 线程 多线程编程 信号量