linux程序设计---多线程
来源:互联网 发布:京东广告部算法工程师 编辑:程序博客网 时间:2024/06/06 19:38
linux程序设计---多线程
/*
在编译多线程程序的时候,要加上-lpthread选项,指定pthread库。在程序代码中包含线程头文件pthread.h。
*/
1,创建一个线程。
int pthread_create(pthread_t *pthread_id,const pthread_attr_t *attr,void *(*start_rtn)(void *),void *arg);
pthread_t *pthread_id: 线程id,有系统自动填充。
pthread_attr_t *attr:线程属性,一般情况下为NULL;
void *(*start_rtn)(void *):线程执行的函数。该函数的返回值是void类型的指针,函数参数也是void类型的指针,注意:
这个函数也可以不传递参数。
比如:
void *create(void *args); //标准形式。
void *create(void); //这个也行。
/*
在编译多线程程序的时候,要加上-lpthread选项,指定pthread库。在程序代码中包含线程头文件pthread.h。
*/
1,创建一个线程。
int pthread_create(pthread_t *pthread_id,const pthread_attr_t *attr,void *(*start_rtn)(void *),void *arg);
pthread_t *pthread_id: 线程id,有系统自动填充。
pthread_attr_t *attr:线程属性,一般情况下为NULL;
void *(*start_rtn)(void *):线程执行的函数。该函数的返回值是void类型的指针,函数参数也是void类型的指针,注意:
这个函数也可以不传递参数。
比如:
void *create(void *args); //标准形式。
void *create(void); //这个也行。
void *arg 线程执行函数的参数。
2,等待线程执行。
int pthread_join(pthread_t pthread_id,void **args);
pthread_t pthread_id:线程的id。
void **args:线程返回的状态码。
2,等待线程执行。
int pthread_join(pthread_t pthread_id,void **args);
pthread_t pthread_id:线程的id。
void **args:线程返回的状态码。
3,退出线程方法有两种:
一种是正常退出,可以使用的语句:return,pthread_exit(void *args);
二种是正常退出。
不可以使用exit和_exit,这样不但退出线程,而且会退出整个进程。
4,获取进程ID。
pthread_t pthread_self(void); 返回线程id.这个id跟pthread_creat中的第一个参数的值一样。
5,清除。
void pthread_cleanup_push(void (*rtn)(void *),void *args);
void (*rtn)(void *):指定清除函数。
void *args;清除函数的参数。
void pthread_cleanup_pop(int excute);
一种是正常退出,可以使用的语句:return,pthread_exit(void *args);
二种是正常退出。
不可以使用exit和_exit,这样不但退出线程,而且会退出整个进程。
4,获取进程ID。
pthread_t pthread_self(void); 返回线程id.这个id跟pthread_creat中的第一个参数的值一样。
5,清除。
void pthread_cleanup_push(void (*rtn)(void *),void *args);
void (*rtn)(void *):指定清除函数。
void *args;清除函数的参数。
void pthread_cleanup_pop(int excute);
如果在pthread_cleanup_push和pthread_cleanup_pop之间的代码出现退出,不管是正常的pthread_exit退出(return 退出不算),
还是不正常的退出,就会执行pthread_cleanup_push指定的清除函数。如果之间的代码没有出现退出,只有excute为非零的时候
才执行pthread_cleanup_push中指定的清除函数,如果excute为零的话,就不执行指定的清除函数。
还是不正常的退出,就会执行pthread_cleanup_push指定的清除函数。如果之间的代码没有出现退出,只有excute为非零的时候
才执行pthread_cleanup_push中指定的清除函数,如果excute为零的话,就不执行指定的清除函数。
6,多线程的同步机制
实现线程同步机制:信号量和互斥量。
信号量:
#include
int sem_init(sem_t *sem,int pshared,unsigned int value); //信号量的初始化。
sem_t *sem:信号量,有系统进行分配。
int pshared:信号量共享标志,如果为0,信号量只能在本进程中使用,如果非零可以再其他进程中使用,常设置为0;
unsigned int value:信号量的初始值。
实现线程同步机制:信号量和互斥量。
信号量:
#include
int sem_init(sem_t *sem,int pshared,unsigned int value); //信号量的初始化。
sem_t *sem:信号量,有系统进行分配。
int pshared:信号量共享标志,如果为0,信号量只能在本进程中使用,如果非零可以再其他进程中使用,常设置为0;
unsigned int value:信号量的初始值。
int sem_wait(sem_t *sem); 获取信号量,对信号量进行减一操作。
int sem_post(sem_t *sem);释放信号量,对信号量加一操作。
int sem_destory(sem_t *sem);信号量清除。
int sem_post(sem_t *sem);释放信号量,对信号量加一操作。
int sem_destory(sem_t *sem);信号量清除。
使用信号量操作共享数据时,注意操作时序。
互斥量:
#include
int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *mutex_attr);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
互斥量:
#include
int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *mutex_attr);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
7,线程的属性。
#include
int pthread_attr_init(pthread_attr_t *attr); 线程属性初始化。
设置线程为脱离线程。
int pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate);
pthread_attr_t *attr:线程属性指针。
int detachstate:线程属性标志:PTHREAD_CREAT_JOIN,PTHREAD_CREAT_DETACHED.
线程属性标志缺省值为PTHREAD_CREAT_JOIN 及归并线程。PTHREAD_CREAT_DETACHED 设置线程为脱离线程。
#include
int pthread_attr_init(pthread_attr_t *attr); 线程属性初始化。
设置线程为脱离线程。
int pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate);
pthread_attr_t *attr:线程属性指针。
int detachstate:线程属性标志:PTHREAD_CREAT_JOIN,PTHREAD_CREAT_DETACHED.
线程属性标志缺省值为PTHREAD_CREAT_JOIN 及归并线程。PTHREAD_CREAT_DETACHED 设置线程为脱离线程。
设置线程调度策略。
int pthread_attr_setschedpolicy(pthread_attr_t *attr,int policy)
int pthread_attr_setschedpolicy(pthread_attr_t *attr,int policy)
8,取消一个线程。
#include
int pthread_cancle(pthread_t thread);
#include
int pthread_cancle(pthread_t thread);
int pthread_setcanclestate(int state,int *oldstate); //设置线程的取消状态。
int state:如果为PTHREAD_CANCLE_ENABLE,允许线程接受取消请求。
如果为PTHREAD_CANCEL_DISABLE,不允许线程接受取消请求,屏蔽取消请求。
int *oldstate:获取线程以前的取消状态,如果不需要,设置为NULL;
int state:如果为PTHREAD_CANCLE_ENABLE,允许线程接受取消请求。
如果为PTHREAD_CANCEL_DISABLE,不允许线程接受取消请求,屏蔽取消请求。
int *oldstate:获取线程以前的取消状态,如果不需要,设置为NULL;
int pthread_setcancletype(int type,int *oldtype); //设置取消类型。
int type:如果为PTHREAD_CANCLE_ASYNCHRONOUS,接到请求立马执行取消操作。
如果为PTHREAD_CANCLE_DEFERRED,执行取消操作之前,先执行以下函数之一:pthread_join,pthread_cond_wait,
pthead_cond_tomewait,pthread_testcancle,sem_waith,sigwait。
int *oldtype:索引以前的状态,如果不需要,直接为NULL;
在缺省状态下,线程启动时的取消状态为PTHEAD_CANCLE_ENABLE,取消类型为PTHREAD_CANCLE_DEFERRED.
int type:如果为PTHREAD_CANCLE_ASYNCHRONOUS,接到请求立马执行取消操作。
如果为PTHREAD_CANCLE_DEFERRED,执行取消操作之前,先执行以下函数之一:pthread_join,pthread_cond_wait,
pthead_cond_tomewait,pthread_testcancle,sem_waith,sigwait。
int *oldtype:索引以前的状态,如果不需要,直接为NULL;
在缺省状态下,线程启动时的取消状态为PTHEAD_CANCLE_ENABLE,取消类型为PTHREAD_CANCLE_DEFERRED.
0
上一篇:关于might_sleep的一点说明
下一篇:运行不息的内核线程kthread
相关热门文章
- linux 常见服务端口
- 【ROOTFS搭建】busybox的httpd...
- xmanager 2.0 for linux配置
- 什么是shell
- linux socket的bug??
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- 10、linux多线程程序设计
- LINUX 多线程程序设计
- linux多线程程序设计
- linux程序设计---多线程
- Linux多线程程序设计
- linux程序设计---多线程
- linux多线程程序设计
- Linux多线程程序设计
- Linux多线程程序设计
- Linux多线程程序设计
- Linux多线程程序设计
- 《linux程序设计》多线程学习
- Linux 多线程程序设计-LS13
- linux应用程序设计基础--多线程程序设计
- Linux多线程程序设计学习笔记
- Linux下多线程程序设计实验
- Linux笔记_多线程程序设计
- 【Linux C程序设计】创建多线程
- Linux/stat.h 读写权限
- 三星S3C2440 Datasheet LCD Controller 章节翻译(2)
- proc函数
- 内联函数
- 关于might_sleep的一点说明
- linux程序设计---多线程
- 运行不息的内核线程kthread
- VirtualBox虚拟机网络环境解析和搭建-NAT、桥接、Host-Only、Internal、端口映射
- mdev.c分析
- 集合的选择
- mdev.c(二)
- mdev.txt
- Linux下的device_create创建字符设备节点流程
- c语言编译常见错误改正
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
谥号大全
帝王谥号全解
谥法表
谥号文正
皇帝谥
汉武帝谥号
文臣谥号排名
王安石 谥号
自谥身亡的读音
谥号是什么意思
谥号的意思
综美剧香飘四谥的肉
平谷景点
平谷旅游
平谷线
平谷大集
平谷栈道
平谷天云山
平谷一点红
地铁平谷线
平谷吧
平谷区医院
平谷二手房
平谷中学
平谷地铁
平谷玻璃栈道
北京市平谷区
平谷飞龙影视基地
平谷旅游景点
平谷旅游景点大全
平谷金海湖突发山火
平谷湖洞水自然风景区
北京平谷旅游景点
北京平谷区在几环
平谷天云山旅游
北京 北京
平身
毕加索身平
魔临二次元 众卿平身
平车缝纫机
常平汽车站长途车表