您的位置:首页 > 运维架构 > Linux

Linux _pthread 属性的控制

2016-04-02 04:29 225 查看
线程的属性控制

问题

某些情况下,子线程创建并运行后,不需要返回到主线程。

main2.c

解决方案:

把该子线程设置为“脱离线程”

脱离线程的设置

1) 方式1

在创建该线程时,设置该线程的属性。 即:

—————————————————————————-

/* 定义一个线程属性 attribute */

pthread_attr_t attr;

/* 初始化该属性 */
pthread_attr_init(&attr);

/* 设置该线程的脱离属性 */
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
----------------------------------------------------------------------------

/* 使用这个属性创建新线程 */
pthread_create(&thread, &attr, handle, &arg);


2)方式2

使用pthread_detach函数。

例如:pthread_detach(thread);

注意:使用pthread_join对脱离线程无效!

注意:线程始终依附于所在的进程。

当进程中的主线程结束时,该进程也就结束了,

此时,该进程的所有子线程都将被迫结束。

所以在主线程要么始终不结束,要么用pthread_join,否则主线程结束后将导致所有其他线程都结束。

其他线程属性的控制(一般都使用默认属性)

pthread_attr_setschedpolicy 设置线程的调度方式

pthread_attr_setstacksize 设置线程的栈大小

main2.c

线程的属性控制

1. 问题
某些情况下,子线程创建并运行后,不需要返回到主线程。

main2.c

解决方案:
把该子线程设置为“脱离线程”

2. 脱离线程的设置
1) 方式1
在创建该线程时,设置该线程的属性。 即:
----------------------------------------------------------------------------
/* 定义一个线程属性 attribute */
pthread_attr_t  attr;

/* 初始化该属性 */
pthread_attr_init(&attr);

/* 设置该线程的脱离属性 */
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
----------------------------------------------------------------------------

/* 使用这个属性创建新线程 */
pthread_create(&thread, &attr, handle, &arg);

2)方式2
使用pthread_detach函数。
例如:pthread_detach(thread);

注意:使用pthread_join对脱离线程无效!

注意:线程始终依附于所在的进程。
当进程中的主线程结束时,该进程也就结束了,
此时,该进程的所有子线程都将被迫结束。
所以在主线程要么始终不结束,要么用pthread_join,否则主线程结束后将导致所有其他线程都结束。

3. 其他线程属性的控制(一般都使用默认属性)
pthread_attr_setschedpolicy  设置线程的调度方式
pthread_attr_setstacksize     设置线程的栈大小
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: