博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POSIX定时器timer_create()以及线程中的gettid() 和pthread_self()
阅读量:4049 次
发布时间:2019-05-25

本文共 861 字,大约阅读时间需要 2 分钟。

POSIX定时器:


最强大的定时器接口来自POSIX时钟系列,其创建、初始化以及删除一个定时器的行动被分为三个不同的函数:

timer_create()(创建定时器)
timer_settime()(初始化定时器)
timer_delete(销毁它)

关于POSIX定时器,可参考,写的很详细,在此不赘述。

下面是看论坛是发现的问题,记录在此了

linux多线程环境下gettid() pthread_self() 两个函数都获得线程ID

linux使用进程模拟线程,gettid 函数返回实际的进程ID,pthread_self 函数返回 pthread_create创建线程时的ID。

到底那个是线程的ID呢,一个线程不能有两个ID吧?

参考:

gettid是内核中的线程的ID, pthread_self是POSIX thread ID 。

线程库实际上由两部分组成:内核的线程支持+用户态的库支持(glibc),Linux在早期内核不支持线程的时候,glibc就在库中(用户态)以纤程(就是用户态线程)的方式支持多线程了,POSIX thread只要求了用户编程的调用接口对内核接口没有要求。linux上的线程实现就是在内核支持的基础上以POSIX thread的方式对外封装了接口,所以才会有两个ID的问题。

如果想编写 可移植的 多线程代码,代码可运行于 Solaris、FreeBSD、Linux 和其它平台,POSIX 线程是一种当然之选。

POSIX thread ID可以在一个进程内唯一标识一个线程,但如果放到系统范围内的话就得用gettid了。

其实 POSIX thread ID 是POSIX 标准的,所有遵循POSIX标准的系统都支持,gettid是linux独有的,

由于在Linux下POSIX thread 和系统thread是一对一的模型,所以可以认为一个gettid必然对应一个pthread id,但没有什么方法直接实现对两者的对应转换。

这篇文章:,有助于理解线程的相关概念。

转载地址:http://ssnci.baihongyu.com/

你可能感兴趣的文章
所谓的进步和提升,就是完成认知升级
查看>>
为什么读了很多书,却学不到什么东西?
查看>>
长文干货:如何轻松应对工作中最棘手的13种场景?
查看>>
如何用好碎片化时间,让思维更有效率?
查看>>
No.174 - LeetCode1305 - 合并两个搜索树
查看>>
No.175 - LeetCode1306
查看>>
No.176 - LeetCode1309
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql truncate (清除表数据)
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
yuv420 format
查看>>
yuv420 还原为RGB图像
查看>>
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt 创建异形窗体
查看>>
简单Linux C线程池
查看>>
内存池
查看>>
GNU hello代码分析
查看>>