线程(一)


线程包含了表示进程执行环境必须的信息,其中包括进程中标识线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、erron变量以及线程的私有数据。进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本、程序的全局内存和堆内存、栈以及文件描述符。
线程接口来自POSIX.1-2001。POSIX线程的特征测试宏是_POSIX_THREADS,应用程序可以把这个宏用#ifdef测试,以在编译时确定是否支持线程;也可以把_SC_THREADS常数用于调用sysconf函数,从而在运行时确定是否支持线程。
(1)线程标识
就像每一个进程有一个进程ID一样。每个线程也都有一个线程ID。进程ID在整个系统中是唯一的,但是线程ID不同,线程ID只有它所属的进程环境中有效。
该函数来对两个线程ID进行比较,返回值若相等则返回值非0,否则返回0.
#include
intpthread_equal(pthread_t  tid1, pthread_ttid2);
线程可以通过调用pthread_self函数获得自身的线程ID,调用线程的线程ID。
#include
pthread_tpthread_self(void);
当线程需要识别以线程ID作为识别的数据结构时,pthread_self函数可以与pthread_equal一起使用。
(2)线程创建
在传统的UNIX进程模型中,每个进程只有一个线程控制。从概念上讲,这与基于线程的模型中每个进程只包含一个线程是相同的。在POSIX线程的情况下,程序开始运行时,它也是以单进程中的单个控制线程启动的,在创建多个控制线程以前,程序的行为与传统的进程没有什么区别。
创建线程通过调用pthread_create函数创建,创建成功返回0,否则返回错误编号
#include
intpthread_create(pthread_t *tid, const pthread_atter_t *atter, void*(*start_rtn) (void *), void *arg)
新建的线程从start_rtn函数的地址开始运行,该函数只有一个无类型的指针参数arg,如果需要向start_rtn传递参数不止一个,那么需要把这个参数放到一个结构体中,然后把这个结构体的地址作为arg参数传入。
注意:如果在主线程中创建线程时,应该让主线程休眠,如果主线程不休眠,它就可能退出,这样在新线程有机会运行之前整个进程可能就已经终止了,所以应该保证在所有的线程运行结束之后,再主线程结束。这种行为特征依赖于操作系统的线程实现和调度算法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值