多线程

原创 2012年03月26日 23:09:54

1.       创建线程与退出线程

int pthread_create(pthread_t * thread, const pthread_attr_t  *attr, void *(*start)(void*), void *arg )

返回值:成功 0  失败 -1

Thread_create 函数用于创建线程,参数thread用于保存线程的线程变量。attr参数为要设置的线程属性。start参数用于指向线程执行调用的函数。参数arg为线程要执行函数的调用参数。

   void pthread_exit(void *value_ptr)

   返回值:成功 0,失败非0

   pthread_exit函数用于结束线程的运行,参数value_ptr设置线程退出的返回值。由于value_ptr为指向内存空间的指针。

2.       基本线程的管理

int pthread_join(pthread_t thread, void **value_ptr)

返回值:成功 0,失败非0

Pthread_join函数将挂起调用该函数的线程,直到thread参数指定的线程运行结束,当函数返回时,被等待的线程的资源被收回。

3.       线程属性

1.1. 初始化线程属性

int pthread_attr_init(pthread_attr_t *attr)

返回值:成功 0,失败非0

Pthread_attr_init函数用于使用参数attr中的属性来初始化线程对象,该函数必须在pthread_create函数之前调用。

Pthread_attr_t结构体定义如下:

Typedef struct

{

         Int _detachstate; //线程的分离状态

         Int _schedpolicy; //线程分离状态

         Struct sched_param  _schedparam; // 线程的调度参数

         Int _inheritcched; //线程的继承性

         Int _scope;     //线程作用域

         Int t_guardsize;     

     Int _stackaddr_set;

         Void * _stackaddr;  //线程堆栈位置

         Unsigned long int _stacksize;  //线程堆栈大小

} pthread_attr_t;

1.2. 设置和获得线程分离状态

Int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)

返回值:成功 0,失败非0

Pthread_attr_setdetachstate用于设置线程属性对象的线程分离状态。Attr为指向要设置的线程属性对象的指针,detachstate参数可取PTHREAD_CREATE_DETACHED(分离线程)PTHREAD_CREATE_JOINABLE(非分离线程)

int pthread_attr_getdetachstate(const pthread_attr_t *attr, int  * detachstate)

返回值:成功 0,失败非0

pthread_attr_getdetachstate函数将从attr参数获得线程分离状态,并将结果保存在detachstate指针所指向的内存空间中,

1.3. 设置于获取线程属性对象的作用域

Int pthread_attr_setscope(pthread_attr_t *attr, int contentionscope)

返回值:成功 0,失败非0

Pthread_attr_setscope函数中,attr参数为指向要设置的线程属性对象的指针。Contentionscope参数为作用域取值。该参数可以去PTHREAD_SCOPE_SYSTEM,表明线程是在系统调度竞争资源。而PTHREAD_SCOPE_PROCESS表示线程是在同一进程内,是在线程间调度竞争资源。

Int pthread_attr_getscope(const pthread_attr_t *attr, int * contentionscope)

返回值:成功 0,失败非0

Pthread_attr_getscope函数将从attr参数中获得线程的作用域信息,并将结果保存在contentionscope指针所指向的内存空间。

1.4. 设置和获得线程属性对象的继承性

Int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched)

返回值:成功 0,失败非0.

pthread_attr_setinheritsched函数中,attr参数为指向要设置的线程属性对象的指针。Inheritsched参数为继承性取值情况,该参数的取值情况:

PTHREAD_INHETIT_SCHED:新产生的线程继承创建线程的调度属性。

PTHREAD_EXPLICIT_SCHED:从线程属性对象中设置调度属性。

Int pthread_attr_getinheritsched(pthread_attr_t *attr , int *policy)

返回值:成功 0,失败非0

pthread_attr_getinheritsched函数将从attr参数中获取继承性信息,并将结果保存在policy指针所指向的内存空间。

1.5. 设置和获得线程属性对象的调度策略

Int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy)

返回值:成功 0,失败非0

pthread_attr_setschedpolicy函数attr参数为指向要设置的线程属性对象的指针,policy参数为要设置的调度策略,可以取SCHED_FIFO(先进先出)SCHED_RR(轮转法)SCHED_OYHER(未定义的调度策略)

Int pthread_attr_getschedpolicy(const pthread_attr_t *attr , int *policy)

pthread_attr_getschedpolicy函数将从attr参数中获取线程调度策略信息,并将结果保存在policy指针所指向的内存空间。

1.6. 设置和获得线程属性对象的调度参数

Int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param * param)

返回值:成功 0,失败非0

pthread_attr_setschedpolicy函数attr参数为指向要设置的线程属性对象的指针,param参数为指向sched_param结构体的指针。

Int pthread_attr_getschedparam(const pthread_attr_t *attr , struct sched_param * param)

pthread_attr_getschedpolicy函数将从attr参数中获取线程调度策略信息,并将结果保存在param指针所指向sched_param类型的结构体中。

 

有感于滥用多线程之遍历文件目录信息

今天这篇博文,完全是有感而发,不仅仅是经常看到有人求文件夹遍历的代码,主要是,看到有些人写了一些多线程读取的方法,贴到网上供人参考使用,然后真有不少人特意求这种多线程遍历文件目录的方法。看到这个现象,...
  • foren_whb
  • foren_whb
  • 2015年06月06日 11:50
  • 1587

项目属性 多线程 dll 和 多线程 的区别

2.控制台应用程序依赖msvcr100.dll,可以将项目属性 多线程 dll 改成 多线程 ,这样就把依赖库加到了.exe可执行文件中 3.MFC应用程序依赖msvcr100.dll/mf...
  • xiaoyafang123
  • xiaoyafang123
  • 2016年08月09日 11:54
  • 1022

多线程MT和多线程MD的区别

遇到问题:在编写DLL的过程中,一个接口在执行return之后,出现崩溃,崩溃出现在HeapFree这里。 解决办法:更改工程属性,C/C++——代码生成——运行库,由多线程(/MT)修改为...
  • huashuolin001
  • huashuolin001
  • 2016年06月22日 12:30
  • 1566

使用libpcap库的多线程问题

最近在系统里遇到一个程序,总会莫名其妙的segmentation fault,而且每次出现的问题都不相同。考虑到有多线程,可能会跟这个有关系。但是一直没有找出到底哪里出的问题,这个程序使用libpca...
  • sjx1989
  • sjx1989
  • 2015年12月31日 10:38
  • 1472

spring-junit多线程测试

使用junit进行单元测试的时候,并不能对多线程的操作进行测试。一般情况下是使用main方法来进行测试。但如果项目需要加载大量的配置的情况下,测试类写起来很复杂,需要去写加载各种配置文件的代码。不过可...
  • wangqingqi20005
  • wangqingqi20005
  • 2016年09月21日 21:31
  • 2746

java中的多线程测试例子

在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。 对于直接继承Thread的类来说,代码大致框架是: ? 1 2...
  • wuwei19841002
  • wuwei19841002
  • 2014年02月13日 10:32
  • 4783

多线程写图像文件的一点小测试

在处理遥感图像中,发现往往比较耗时的是在数据的IO中,尤其是在O(写入)的时候更加耗时。GDAL可以支持图像的多线程写入,下面结合实例进行简单的测试,看看实际效果会不会提高。        在这里我...
  • liminlu0314
  • liminlu0314
  • 2012年04月01日 21:45
  • 3670

Java多线程看着一篇足够了!

引 如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来...
  • zhangliangzi
  • zhangliangzi
  • 2016年05月24日 15:53
  • 10436

什么是多线程 菜鸟入门

网上很多资料对多线程都有详细的描述与理解,本菜鸟刚刚入门JAVA对多线程方面不是很熟悉,在看过很多视屏,以及相关博客,书籍通过自己的语言来描述对JAVA多线程的理解,给一些和我一样的菜鸟一起交流,写的...
  • x329357842
  • x329357842
  • 2015年12月23日 16:29
  • 6054

多线程部分案例总结

多线程部分案例总结 1.关于进程和线程的理解 进程:正在执行的应用程序 线程:进程的执行单元,执行路径 单线程:一个应用程序只有一条执行路径 多线程:一个应用程序有多条执行路径 多...
  • xiao_long_wang
  • xiao_long_wang
  • 2015年12月16日 16:28
  • 753
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多线程
举报原因:
原因补充:

(最多只允许输入30个字)