Unix环境多线程编程(二)

原创 2006年05月23日 16:58:00

1.1        线程属性函数

1.1.1   数据类型及总体说明

数据定义头文件 /usr/include/bits/pthreadtypes.h

pthread_attr_t

线程属性。属性对象主要包括是否绑定、是否分离、堆栈地址、堆栈大小、优先级

 

属性值不能直接设置,须使用相关函数进行操作

每个属性都有属性名,可以单独通过pthread_attr_set属性名 这个函数来更改,通过pthread_attr_get属性名函数获得属性。请看详细api说明。如:

属性:detachstate

函数:int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);

Int pthread_attr_getdetachstate(const pthread_attr_t *attr, int* detachstate);

执行:pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);//设置线程属性为joinable

线程属性名

detachstate

PTHREAD_CREATE_JOINABLE

PTHREAD_CREATE_DETACHED

 

默认:PTHREAD_CREATE_JOINABLE

控制创建的线程是joinable态还是detached

schedpolicy

SCHED_OTHER (regular, non-realtime scheduling)

SCHED_RR  (realtime,  round-robin)

SCHED_FIFO (realtime, first-in first-out)

 

默认:SCHED_OTHER

优先级类别

schedparam

默认:0

线程优先级参数

如果schedpolicy的值为schedpolicy此属性无关紧要

线程创建后可修改此属性

inheritsched

PTHREAD_EXPLICIT_SCHED

PTHREAD_INHERIT_SCHED

 

默认:PTHREAD_EXPLICIT_SCHED

说明此线程优先级是否继承于父线程还是通过上面两个属性确定

scope

PTHREAD_SCOPE_SYSTEM

PTHREAD_SCOPE_PROCESS

 

默认:PTHREAD_SCOPE_SYSTEM

设置线程绑定状态

部分Linux不支持PTHREAD_SCOPE_ PROCESS,需要查看man

 

1.1.2   API

1.6. #include <pthread.h>

线程属性初始化的函数

int pthread_attr_init(pthread_attr_t *attr);

返回: 如果成功0, 失败设置 Exxx error

 

Pthread_attr_init 函数初始化线程属性对象attr,填充所有属性为默认值。这个函数必须在pthread_create函数之前调用,做为pthread_create 函数的第2个参数。属性对象主要包括是否绑定、是否分离、堆栈地址、堆栈大小、优先级。默认的属性为非绑定、非分离、缺省1M的堆栈、与父进程同样级别的优先级。

 

 

1.1.3   Example

#include <pthread.h>
pthread_attr_t attr;
pthread_t tid;

/*
初始化属性值,均设为默认值
*/
pthread_attr_init(&attr);
pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);

pthread_create(&tid, &attr, (void *) my_function, NULL);

设置线程绑定状态的函数为pthread_attr_setscope,它有两个参数,第一个是指向属性结构的指针,第二个是绑定类型,它有两个取值:PTHREAD_SCOPE_SYSTEM(绑定的)和PTHREAD_SCOPE_PROCESS(非绑定的)

#include <pthread.h>
#include
<sched.h>
pthread_attr_t attr;
pthread_t tid;
sched_param param;
int newprio=20;

pthread_attr_init(&attr);
pthread_attr_getschedparam(&attr, &param);
param.sched_priority
= newprio;
pthread_attr_setschedparam(&attr, &param);
pthread_create(&tid, &attr, (void *)myfunction, myarg);

设置线程的优先级,它存放在结构sched_param中。用函数pthread_attr_ getschedparam和函数pthread_attr_setschedparam进行存放,一般说来,我们总是先取优先级,对取得的值修改后再存放回去。

apue《UNIX环境高级编程第三版》第二章答案详解

转载请标明本博客地址 UNIX高级编程第二章习题答案:
  • hubbybob1
  • hubbybob1
  • 2015年11月11日 22:11
  • 1360

UNIX环境高级编程之-----popen函数

头文件: #include 函数说明: FILE * popen ( const char * command , const char * type ); int pclose ( F...
  • chenxun2009
  • chenxun2009
  • 2015年06月15日 01:43
  • 1555

UNIX环境高级编程——线程与进程区别

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:(1)一个程序至少有一个进程,一个进程至少有一个线程。(2)线程的划分尺度小于进程,...
  • ctthunagchneg
  • ctthunagchneg
  • 2013年07月17日 11:57
  • 1972

Unix环境高级编程学习笔记(七) 多线程

线程概述 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(proces...
  • justaipanda
  • justaipanda
  • 2012年08月23日 12:13
  • 4762

《UNIX环境高级编程》多线程同步 pthread_cond_t

最近看《UNIX环境高级编程》多线程同步,看到他举例说条件变量pthread_cond_t怎么用,愣是没有看懂,只好在网上找了份代码,跑了跑,才弄明白 [cpp] view plaincopy 1...
  • sanjiva
  • sanjiva
  • 2015年04月15日 16:46
  • 304

UNIX环境高级编程之----多线程技术(2)

创建线程实际上就是确定调用该线程函数的入口点,这里通常使用的函数是pthread_create。在线程创建之后,就开始运行相关的线程函数。在该函数运行结束,线程也会随着退出。这是其中退出线程的一种方法...
  • chenxun2009
  • chenxun2009
  • 2015年07月11日 23:54
  • 636

Unix环境高级编程学习笔记(七) 多线程

线程概述 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(proces...
  • u010229420
  • u010229420
  • 2015年02月26日 16:35
  • 509

UNIX环境高级编程之----多线程技术(1)

进程是系统中程序执行和资源分配的基本单位。每个进程都有自己的数据段,代码段和堆栈段,这就导致了进程在进行切换等操作起到了现场保护作用。但是为了进一步减少处理机的空转时间支持多处理器和减少上下文切换开销...
  • chenxun2009
  • chenxun2009
  • 2015年07月11日 23:29
  • 623

多线程 一个mutex互斥量实例(unix环境高级编程)

/* * mutex.c * * Created on: 2011-11-23 * Author: lc */ #include #include #include #i...
  • psvoldemort
  • psvoldemort
  • 2011年11月22日 19:37
  • 356

Unix环境高级编程--多线程(一)

对于刚开始写程序或者在很长一段时间,在编写程序时,我们都只会在一个main函数中进行程序的逻辑执行顺序的编写。在接触GUI程序的设计的时候,很多时候希望有一个前端显示以及后台计算的需求。此时如果以多进...
  • mao19931004
  • mao19931004
  • 2016年11月05日 17:31
  • 345
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unix环境多线程编程(二)
举报原因:
原因补充:

(最多只允许输入30个字)