线程的一点小知识
来源:互联网 发布:电脑网络连接线 编辑:程序博客网 时间:2024/05/16 06:38
http://blog.csdn.net/pbymw8iwm/article/details/6721038这篇文章讲的挺多,但是现在只用到很少的一部分,用到的部分就抄下来如下:
1.线程属性
1.
名称::
pthread_attr_init/pthread_attr_destroy
功能:
对线程属性初始化/去除初始化
头文件:
#include<pthread.h>
函数原形:
int pthread_attr_init(pthread_attr_t*attr);
int pthread_attr_destroy(pthread_attr_t*attr);
参数:
Attr
返回值:
若成功返回0,若失败返回-1。
线程属性结构如下:
typedef struct
{
}pthread_attr_t;
每个个属性都对应一些函数对其查看或修改。下面我们分别介绍。
二、线程的分离状态
而分离线程不是这样子的,它没有被其他的线程所等待,自己运行结束了,线程也就终止了,马上释放系统资源。程序员应该根据自己的需要,选择适当的分离状态。所以如果我们在创建线程时就知道不需要了解线程的终止状态,则可以pthread_attr_t结构中的detachstate线程属性,让线程以分离状态启动。
2.
名称::
pthread_attr_getdetachstate/pthread_attr_setdetachstate
功能:
获取/修改线程的分离状态属性
头文件:
#include<pthread.h>
函数原形:
int pthread_attr_getdetachstate(const pthread_attr_t *attr,int *detachstate);
int pthread_attr_setdetachstate(pthread_attr_t *attr,intdetachstate);
参数:
Attr
Detachstate
返回值:
若成功返回0,若失败返回-1。
可以使用pthread_attr_setdetachstate函数把线程属性detachstate设置为下面的两个合法值之一:设置为PTHREAD_CREATE_DETACHED,以分离状态启动线程;或者设置为PTHREAD_CREATE_JOINABLE,正常启动线程。可以使用pthread_attr_getdetachstate函数获取当前的datachstate线程属性。
以分离状态创建线程
#iinclude<pthread.h>
void *child_thread(void *arg)
{
printf(“child thread run!\n”);
}
int main(int argc,char *argv[ ])
{
}
线程属性
POSIX定义的线程属性有:可分离状态(detachstate), 线程栈大小(stacksize),线程栈地址( stackaddr),作用域(scope), 继承调度(inheritsched), 调度策略(schedpolicy)和调度参数( schedparam)。 有些系统并不支持所有这些属性,使用前注意查看系统文档。
线程的相关API:
pthread_create():创建一个线程
pthread_exit():终止当前线程
pthread_cancel():中断另外一个线程的运行
pthread_join():阻塞当前的线程,直到另外一个线程运行结束
pthread_attr_init():初始化线程的属性
pthread_attr_setdetachstate():设置脱离状态的属性(决定这个线程在终止时是否可以被结合)
pthread_attr_getdetachstate():获取脱离状态的属性
pthread_attr_destroy():删除线程的属性
pthread_kill():向线程发送一个信号
例如我这边程序中用到的:
pthread_attr_t attr;//对线程属性初始化 pthread_attr_init(&attr);//初始化线程 pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);/<span style="font-family:宋体;">/线程以分离状态启动,自己运行结束,线程自行终止,马上释放系统资源</span><span style="font-size:16px"></span> pthread_create(&fota_thrd, &attr, start_fota_thread, NULL);//创建线程 pthread_attr_destroy (&attr);//删除线程属性
使用多线程的理由之一是和进程相比,它是一种非常花销小,切换快,更"节俭"的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。
使用多线程的理由之二是线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。
线程与进程的对比可参考:http://www.cnblogs.com/gguozhenqian/archive/2011/11/16/2251521.html
- 线程的一点小知识
- 关于进程和线程的一点小知识~
- DirectX的一点小知识
- ios的一点小知识
- ffmpeg的一点小知识
- 数据库的一点小知识
- Java中的线程的一点知识
- UNICODE、DBCS的一点小知识
- Linux中scp的一点小知识
- UNICODE、DBCS的一点小知识
- 关于隧道的一点小知识
- UNICODE、DBCS的一点小知识
- c编译的一点小知识
- 一点JavaBeans的入门小知识
- 关于excel开发的一点小知识
- ibatis中CDATA的一点小知识
- 表列有默认值的一点小知识
- ibatis中<![CDATA[的一点小知识
- 运行时错误解决方法
- 手机wap页面开发小记
- 最长公共子串问题(方法一:暴力+RK匹配,方法二:DP+空间优化)
- 我的电脑梦
- 组件过滤功能
- 线程的一点小知识
- JVM内存配置详解
- C++ ofstream和ifstream详细用法以及C语言的file用法
- 试用ikanalyzer进行分词查询
- android update.zip升级包的制作
- java 数字进制间转换(2,8,10,16)
- ant
- myeclipse部署时出现could not be redeployed because ……错误
- Oracle 数据库基础知识介绍