线程属性的初始化以及销毁

本文详细解释了如何使用线程属性初始化函数`pthread_attr_init`为线程配置属性,以及如何通过`pthread_create`函数创建线程。重点强调了线程属性对象必须先初始化才能生效,否则创建线程时会返回错误。同时,文章通过实例演示了如何在创建线程前初始化线程属性对象,并展示了线程属性对象销毁后线程属性不受影响的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*初始化属性
int pthread_attr_init(pthread_attr_t *tattr);
函数将对象属性初始化为其缺省值。分配一些存储空间,所以需要下面的函数删除初始化期间分配的存储空间。
int pthread_attr_destroy(pthread_attr_t *tattr);
以上两个函数成功都返回 0.*/
#include <stdlib.h>
#include <pthread.h>
#include <stdio.h>
#include <sched.h>
void *consumer(void *p)
{
  static int a = 0;
  printf("<<<<<<<<<<<<<<<<<<<<<(%u),%d\n", (unsigned)pthread_self(), ++a);
  return NULL;
 }       
 int main(int argc, char *argv[])
{
        pthread_t  t1, t2, t3;
        int ret;
        pthread_attr_t attr;
       // pthread_attr_init(&attr);
       //没有这句会发生Segmentation fault (core dumped)
       ret = pthread_create(&t1, &attr, consumer, NULL);
        if(ret != 0)
        {
                 printf("create failed,%d\n", ret);
                 exit(1);
         }       
        pthread_attr_destroy(&attr);
        sleep(1);
    return 0;
}   
/*输出结果:<<<<<<<<<<<<<<<<<<<<<(3077286800),1
注意:属性对象必须初始化,否则属性不能生效,创建线程时将返回错误。
属性对象被销毁,并不影响线程的属性。
pthread_attr_init是初始化一个线程对象的属性,需要用pthread_attr_destroy对其去除初始化
int pthread_attr_init(pthread_attr_t *attr);
返回0,表示函数初始化对象成功。失败时返回一个错误代码。
参数:指向一个线程属性的指针。
attr对应单词attribute 即属性的意思
init对应单词initialize 即初始化的意思*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值