pthread 多线程编程_mutex 和 cond_t
来源:互联网 发布:linux write 编辑:程序博客网 时间:2024/06/05 20:08
1、 引用头文件#include <pthread.h>
2、 线程创建:
int pthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);
若成功则返回0,否则返回出错编号
第一个参数为指向线程标识符的指针
第二个参数用来设置线程属性(通常为空)
第三个参数是线程运行函数的起始地址
第四个参数是运行函数的参数
3.、线程终止
如果进程中任何一个线程调用exit或_exit, 整个进程都会终止
方法:1)、return 返回
2)、终止函数:
void pthread_exit(void *rval_ptr): Rval_ptr:线程退出返回值得指针
int pthread_cancel(pthread_t thread); 参数是要取消目标线程的ID
4、 线程等待
int pthread_join(pthread_t tid, void **rval_ptr)
功能:阻塞调用线程,知道指定的线程终止,Tid:等待退出的线程id,Rval_ptr:线程退出返回值得指针
5、 线程标识
pthread_t pthread_self(void), 获取调用线程的thread identifier
6.、互斥量
初始化:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
加锁: pthread_mutex_lock(&mutex);
去锁:pthread_mutex_unlock(&mutex);
销毁锁:pthread_mutex_unlock(&mutex);
7、条件变量
初始化: pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
唤醒线程: pthread_cond_signal(&cond);
睡眠等待:pthread_cond_wait(&cond,&mutex);
销毁: pthread_cond_wait(&cond,&mutex)
pthread_cond_wait 和 pthread_mutex_lock一起使用,先pthread_mutex_lock,然后pthread_cond_wait内部会自动解锁,然后进入等待,这样其他线程就可以继续获得锁了。
#include <pthread.h> #include <stdio.h> #include <stdlib.h> int i = 0; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; void *thread1(void *);int main(){ pthread_t tid; pthread_create(&tid,NULL,thread1,(void *)NULL); pthread_mutex_lock(&mutex); while(i < 100) {pthread_cond_wait(&cond, &mutex); } printf("i=%d\n",i); pthread_mutex_unlock(&mutex); pthread_join(tid, NULL); pthread_mutex_destroy(&mutex); pthread_cond_destroy(&cond); return 0;} void *thread1(void *junk){ while(1) {pthread_mutex_lock(&mutex);if(i < 200){i++;pthread_cond_signal(&cond);pthread_mutex_unlock(&mutex);}else{pthread_mutex_unlock(&mutex);break;} }return NULL;}
- pthread 多线程编程_mutex 和 cond_t
- pthread/Linux多线程编程
- pthread多线程编程
- pthread多线程编程整理
- pthread多线程编程
- pthread多线程编程
- pthread/Linux多线程编程
- pthread多线程编程
- pthread/Linux多线程编程
- pthread多线程编程整理
- pthread/Linux多线程编程
- pthread 多线程编程
- pthread多线程编程整理
- pthread多线程编程整理
- pthread多线程编程整理
- pthread多线程编程+锁
- pthread多线程编程-1
- 【linux编程】pthread多线程
- java类转换为xml
- LJMM平台( Linux +Jexus+MySQL+mono) 上使用MySQL的简单总结
- Leetcode 分开链表
- Oracle(存储过程,触发器等中) if语句中不能有子查询的原因和解决方案
- 黑马程序员——集合框架
- pthread 多线程编程_mutex 和 cond_t
- linux ---- 进程 --- 3
- Oracle 几个简单的数字函数
- Java RSA加密
- linux ---- shell ---- 1
- 认识单片机-单片机最小系统
- C++源文件的后缀名问题
- EXTJS 表单验证方法大全
- 第6章 树和二叉树——递归方法先序、中序、后序遍历二叉链表表示的二叉树