美文网首页
线程的属性

线程的属性

作者: 二进制人类 | 来源:发表于2022-10-06 10:30 被阅读0次

相关API

初始化和释放

#include <pthread.h>
/*
参数1:attr指向线程属性空间,本质是一个结构体空间
    typedef struct{
        int etachstate; //线程的分离状态    
        int schedpolicy; //线程调度策略
        struct sched_param schedparam; //线程的调度参数
        int inheritsched; //线程的继承性
        int scope; //线程的作用域
        size_t guardsize; //线程栈末尾的警戒缓冲区大小
        int stackaddr_set; //线程的栈设置
        void* stackaddr; //线程栈的位置
        size_t stacksize; //线程栈的大小
    } pthread_attr_t;
返回值:成功返回 0 错误返回错误码
在使用pthread_create函数创建线程的时候,
    1) 设置线程属性参数,设置线程属性:
    2) 线程属性参数设置位NULL,采用默认线程属性(默认的属性为非绑定、非分离、缺省的堆栈、与父进程同样级别的优先级)            

 */

int pthread_attr_init(pthread_attr_t *attr);    /* 初始化线程属性空间 */  
int pthread_attr_destroy(pthread_attr_t *attr);    /* 释放线程属性空间 */

设置线程属性状态

#include <pthread.h>
/**
 * [pthread_attr_setdetachstate 设置线程属性状态]
 * @param  attr        [指向的线程属性空间]
 * @param  detachstate [
 *  PTHREAD_CREATE_DETACHED 分离线程
    PTHREADCREATE_JOINABLE  非分离线程
 * ]
 * @return             [成功返回0 错误返回错误码]
 */
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate); //设置
int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate);//获取

设置线程栈

#include <pthread.h>
/**
 * [pthread_attr_setstack 设置线程栈]
 * @param  attr      [指向线程属性空间]
 * @param  stackaddr [传递栈空间地址]
 * @param  stacksize [空间的大小]
 * @return           [成功0 失败错误码]
 */
int pthread_attr_setstack(pthread_attr_t *attr,void *stackaddr, size_t stacksize);
int pthread_attr_getstack(const pthread_attr_t *attr, void **stackaddr, size_t *stacksize);

线程栈大小

#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);

线程栈地址

#include <pthread.h>

int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr);
int pthread_attr_getstackaddr(const pthread_attr_t *attr, void **stackaddr);

实例

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

void *pthread_func(void *arg)
{
    while(1)
    {
        printf("child pthread\n");
        sleep(1);
    }
}

int main()
{
    int ret;
    pthread_t pthread_id;
    pthread_attr_t attr;

    /* 设置线程的属性 */
    ret = pthread_attr_init(&attr);/* 线程属性设置默认值 */
    if (ret != 0)
    {
        fprintf(stderr, "pthread_attr_init fail\n");
        return -1;
    }
#if 1
    int detachstate;
    /* 获取线程属性是否分离 */
    ret = pthread_attr_getdetachstate(&attr, &detachstate);
    if (ret != 0)
    {
        fprintf(stderr, "pthread_attr_getdetachstate fail\n");
        return -1;
    }

    if (detachstate == PTHREAD_CREATE_DETACHED)
    {
        printf("PTHREAD_CREATE_DETACHED");
    }
    else
    {
        printf("PTHREAD_CREATE_JOINABLE");
    }

#else
    /* 初始化线程属性为分离模式 */
    ret = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
    if (ret != 0)
    {
        fprintf(stderr, "pthread_attr_setdetachstate fail\n");
        return -1;
    }
#endif

    /* 创建线程 */
    ret = pthread_create(&pthread_id, &attr, pthread_func, NULL);
    if (ret != 0)
    {
        fprintf(stderr, "create child pthread fail\n");
        return -1;
    }

    pthread_attr_destroy(&attr);

    /* 主线程阻塞等待子线程退出,才返回继续向后执行 */
    pthread_join(pthread_id, NULL);
    printf("main pthread\n");
}

相关文章

  • 线程编程(二)

    修改线程属性pthread_create 函数的第二个参数——线程的属性,NULL为默认属性 系统默认的属性为 绑...

  • 线程的属性

    相关API 初始化和释放 设置线程属性状态 设置线程栈 线程栈大小 线程栈地址 实例

  • 线程属性

    对线程属性的设置 属性对象创建销毁,继承性,调度策略,优先权,分离状态,栈 初始化/销毁线程的属性对象 使用一个线...

  • C++ Linux多线程:各种线程属性和对它们做相关操作的函数

    线程属性 pthread_attr_t 结构体定义了一套完整的线程属性: 可以看到,各种线程属性都包含在一个字符数...

  • iOS atomic和nonatomic

    nonatomic:非原子属性,线程不安全的,效率高atomic:原子属性,线程安全的,效率相对低。原子属性是一种...

  • APUE第12章 线程属性设置

    线程属性 12.3 线程属性 pthread 接口允许我们通过设置每个对象关联的不同属性来细调线 程和同步对象的行...

  • Java并发编程 线程各属性

    1.线程各属性纵览 属性名称用途编号(ID)每个线程有自己的ID,用于标识不同的线程名称(Name)作用让用户或程...

  • 泥瓦匠聊并发编程基础篇:线程中断和终止

    1 线程中断 1.1 什么是线程中断? 线程中断是线程的标志位属性。而不是真正终止线程,和线程的状态无关。线程中断...

  • Java并发(2)——基本属性

    线程属性 线程ID, 线程名称,线程类别(是否守候进程),线程组,线程优先级 线程ID:Thread类自己管理ID...

  • NSThread

    开启子线程方式 创建线程 分离出子线程 开启后台线程 线程属性 线程名字 线程优先级0.0~1.0 默认0.5优先...

网友评论

      本文标题:线程的属性

      本文链接:https://www.haomeiwen.com/subject/ulruartx.html