首页 > 系统相关 >Linux多线程07-线程属性

Linux多线程07-线程属性

时间:2023-06-26 09:00:47浏览次数:46  
标签:detachstate 07 int attr 线程 pthread 多线程 属性

线程属性类型: pthread_attr_t

描述:

pthread_attr_setdetachstate() 函数

将由 attr 引用的线程属性对象的分离状态属性设置为 detachstate 中指定的值。分离状态属性确定使用线程属性对象 attr 创建的线程将在可连接状态还是分离状态下创建。

可以在 detachstate 中指定以下值:

PTHREAD_CREATE_DETACHED 使用 attr 创建的线程将以分离状态创建。

PTHREAD_CREATE_JOINABLE 使用 attr 创建的线程将以可连接状态创建。

新初始化的线程属性对象中分离状态属性的默认设置为 PTHREAD_CREATE_JOINABLE。

pthread_attr_getdetachstate() 函数将 attr 中的线程属性对象的分离状态属性返回到由 detachstate 指向的缓冲区中。

pthread_attr_getdetachstate函数

用于获取线程属性对象的分离状态(detach state),即获取线程是以可分离状态(detached)还是以连接状态(joinable)运行的。

int pthread_attr_init(pthread_attr_t *attr);
    功能: 初始化线程属性变量
    参数: attr 线程属性

int pthread_attr_destroy(pthread_attr_t *attr);
    功能: 释放线程资源
int pthread_attr_getdetachstate(const pthread_attr_t *attr, int
                                *detachstate);
    功能: 获取线程分离状态属性
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
    功能: 设置线程分离状态属性

int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize);

Compile and link with -pthread.

代码实例

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

void* callback(void* arg){
    printf("child thread id: %ld\n",pthread_self());

    return NULL;
}

int main(){
    //创建一个线程属性变量
    pthread_attr_t attr;
    //初始化属性变量
    pthread_attr_init(&attr);

    //设置分离状态属性
    int detachstate = PTHREAD_CREATE_DETACHED;
    pthread_attr_setdetachstate(&attr, detachstate);

    //获取分离状态属性
    pthread_attr_getdetachstate(&attr,&detachstate);
    if(detachstate == PTHREAD_CREATE_DETACHED){
        printf("datachstate: PTHREAD_CREATE_DETACHED\n");
    }

    pthread_t tid;
    //使用我们自己设置好的属性创建子线程
    int ret = pthread_create(&tid, &attr, callback, NULL);
    if(ret!=0){
        char* errstr = strerror(ret);
        printf("error_create: %s\n",errstr);
    }
    
    //输出主线程和子线程ID
    printf("tid: %ld, main thread id: %ld\n",tid,pthread_self());

    //获取线程栈大小
    size_t size;
    pthread_attr_getstacksize(&attr, &size);
    printf("thread stack size: %ld\n", size); //8388608

    //释放线程属性资源
    pthread_attr_destroy(&attr);

    pthread_exit(NULL);

    return 0;
}

运行结果

thread stack size: 8388608
datachstate: PTHREAD_CREATE_DETACHED
tid: 139739962758912, main thread id: 139739971147584
child thread id: 139739962758912

标签:detachstate,07,int,attr,线程,pthread,多线程,属性
From: https://www.cnblogs.com/anqwjoe/p/17504446.html

相关文章

  • Linux多线程06-线程取消
    pthread_cancel描述:pthread_cancel()函数向线程thread发送一个取消请求。目标线程对取消请求的响应取决于该线程控制的两个属性:其取消状态和类型。一个线程的取消状态由pthread_setcancelstate(3)确定,可以启用(对于新线程而言是默认的)或禁用。如果一个线程已禁用取消,则取消请......
  • Linux多线程05-线程的分离
    pthread_detach描述:pthread_detach()函数将由thread标识的线程标记为已分离。当一个分离的线程终止时,它的资源会自动释放回系统,而不需要另一个线程与已终止的线程加入。尝试分离一个已经分离的线程会导致未指定的行为。#include<pthread.h>intpthread_detach(pthread_tt......
  • Linux多线程08-线程同步
    一个多线程售票示例://三个窗口,共100张票#include<stdio.h>#include<pthread.h>#include<unistd.h>inttickets=100;//所有线程都共享这100张票void*sellticket(void*arg){//卖票while(tickets>0){usleep(6000);//间隔6000微秒p......
  • 07前后端项目上传gitee,后端多方式登录接口,发送短信功能,发送短信封装,短信验证码接口,短
    1前后端项目上传到gitee#公司里: -前端一个仓库---》一个团队-后端一个仓库---》一个团队-微服务:两三个人一个服务---》一个项目一个仓库-网上开源软件,前后端都在一起#在远端建立前端仓库#本地代码提交到远成仓库2后端多方式......
  • 异步注解@Async使用自定义线程池
    1.@Async注解@Async是java中一个注解,其作用就是加上该注解的类或方法能够异步执行任务,该注解添加到方法上时,表示该方法是异步方法,添加到类上时,表示该类中的所有方法都是异步方法。该注解的代码为:可以看出其是作用在类和方法上,能够在运行时被获取到。当在使用@Async时,如果不指......
  • QT为什么只能由主线程操作UI
    QT为什么只能由主线程操作UI背景QT中,每次子线程去更新Ui都要通过信号槽去刷。其实不光是QT,很多GUI程序框架都是这么规定的。主线程:主线程是唯一允许创建QApplication或者QCoreApplication对象的,并且调用exec()启动事件循环的线程。原因直接原因:UI线程负责和用户交互,因此不能......
  • ASM disk group mount fails with ORA-15036: disk is truncated [ID 1077175.1]
     ASMdiskgroupmountfailswithORA-15036:diskistruncated[ID1077175.1]--------------------------------------------------------------------------------  修改时间05-OCT-2011    类型PROBLEM    状态PUBLISHED  InthisDocument Sympto......
  • Java多线程-Lesson02
    一.Lamda表达式λ是希腊字母表的第十一位字母,英文名是LambdaLamda表达式的出现主要是为了避免匿名内部类过多的原因,它属于函数式编程的范畴 为什么要使用Lamda表达式?避免匿名内部类定义过多可以让你的代码看起来很简洁去掉了没有意义的代码,只留下一堆核心逻辑主要使用在......
  • java 中的多线程问题
    结论  全局变量 多线程非安全  (堆) static局部变量 多线程安全  (栈) fina也可以安全1:线程调用时,每一个线程都拥有一套完整的调用栈帧,栈帧中包含完整的调用方法名,方法的局部变量。而且栈是先入后出,调用方法时入栈,方法结束是出栈。2:使用线程池时需要注意参数问......
  • C# .NET6结束UI线程
    在.NET6项目中,不再支持Thread.Abort:Thread.AbortisnotsupportedandthrowsPlatformNotSupportedException.原因是Thread.Abort可能导致资源泄漏,1.不正常的关闭,导致线程运行过程中待释放资源的业务代码,未能完成执行。2.异常捕获,业务模块未添加捕获、业务模块添加了捕获但......