多线程相关操作(二)线程属性设置

一、重点属性

        因为线程有许多的属性,而实际需要程序员设计的属性并不多主要掌握以下

三种属性设置。

1、线程分离属性:主要意义是设置主线程是否需要等待子线程的推出

2、线程的调度策略:顾名思义就是设置线程的优先级别

3、线程的栈空间和警戒区:防止越界操作

如果有其他线程属性需要设置请遵循以下方式

1、定义线程属性变量,并使用 pthread_attr_init 函数初始化

2、调用相关函数进行设置,pthread_attr_setxxx;

3、利用该线程变量创建新的线程

4、调用 pthread_attr_destroy 函数销毁线程属性变量

二、直接上代码

// 函数功能:设置分离属性
// 程序当中都没有进行出错处理,自己在操作的时候要注意
/********自己写头文件********/

void *routine(void *arg)
{
    // 子线程停10秒后退出
    for (int i = 10; i > 0; i--)
    {
    	printf("please wait %d scend for quit\n", i);
    	sleep(1);
	}
    
    pthread_exit("pthid quit");
}


int main(void)
{
    // 第一步设置属性变量并初始化
    pthread_attr_t attr;
    pthread_attr_init(&attr);

    // 第二步调用设置属性函数
    // 设置为不分离属性,即父线程要等待子线程退出
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
    
    // 第三步创建相应线程
    pthread_t pthid;
    pthread_create(&pthid, &attr, routine, NULL);

    // 第四步销毁属性变量
    pthread_attr_destroy(&attr);

    // 父线程退出
    pthread_exit(NULL);
}

三、如何在线程内部设置分离属性

3.1、函数说明

1、pthread_detach
函数功能:将指定线程设置为可分离
函数原型:int pthread_detach(pthread_t thread)
参数:线程 id
返回值:0----------->成功
       非0--------->失败

2、pthread_self
函数功能:获取当前线程的id
函数原型:pthread_t pthread_self(void)
参数:无
返回值:当前线程id
错误:内核原话----->This function always succeeds(大佬牛逼)

3、使用
pthread_detach(pthread_self());
很简单,不写事例代码了

四、取消线程

             线程被取消只要在执行到取消点后才会被取消,取消点是一系列函数(请自行百度)

           取消线程函数:pthread_cancel(线程id)

猜你喜欢

转载自blog.csdn.net/qq_41985711/article/details/82466848