线程属性
在使用函数pthread_create()
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
第二个项就用到了属性,是pthread_attr_t类型。
之前都是用的NULL,跟着默认来。
相关函数:
pthread_attr_init();
pthread_attr_destroy ();
- initialize and destroy thread attributes object
#include <pthread.h>
int pthread_attr_init(pthread_attr_t *attr);
int pthread_attr_destroy(pthread_attr_t *attr);
Compile and link with -pthread.
SEE ALSO
pthread_attr_setaffinity_np(3), pthread_attr_setdetachstate(3),
pthread_attr_setguardsize(3), pthread_attr_setinheritsched(3),
pthread_attr_setschedparam(3), pthread_attr_setschedpolicy(3),
pthread_attr_setscope(3), pthread_attr_setstack(3),
pthread_attr_setstackaddr(3), pthread_attr_setstacksize(3),
pthread_create(3), pthread_getattr_np(3), pthreads(7)
以上都是对于线程属性进行控制的一些方法。
介绍一些属性:
pthread_attr_setdetachstate
分离一个线程有两种方法一种是创建线程的时候,使用默认是属性,然后调用pthread_detach函数,就可以分离一个线程
另一种就是首先创建一个属性结构体,然后使用pthread_attr_setdetachstate,设置分离属性,然后再创建线程。
pthread_attr_setstack:设置栈相关内容;
pthread_attr_setstackaddr:选择栈所在的地址;
pthread_attr_setstacksize:设置栈空间的大小;
pthread_attr_getstacksize:获得栈空间的大小;
#include <pthread.h>
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize);
属性的使用
属性的使用和之前所学的互斥量或是条件变量是不同的,它有点类似类。
代码功能:查看进程可以创建的最大的线程量(64位不好使用,因为空间太大,首先消耗的一定是进程号)
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *func(void *p)
{
while(1)
pause();
pthread_exit(NULL);
}
int main()
{
int i;
int err;</