免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4563 | 回复: 11
打印 上一主题 下一主题

[系统] Linux有没有线程变量,是否可以线程级重定向I/O? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-04 17:53 |只看该作者 |倒序浏览
以前在VxWorks中有一种任务变量(它的一个任务类似于一个线程),在移植一些使用全局变量的应用到多任务时会方便一些,但Linux似乎没有找到类似的机制?
另外,Linux中的I/O输出(printf)是不是只能在进程级别上重定向?

论坛徽章:
0
2 [报告]
发表于 2013-01-04 18:28 |只看该作者
linux的线程私有变量是有的,你可以看看我的blog,但是i/o就不清楚了

论坛徽章:
0
3 [报告]
发表于 2013-01-05 08:52 |只看该作者
回复 2# dinglong08


    blog在哪看?好像有一个pthread_setspecific,但这个还是和原来VxWorks的机制完全不同的,对于vx,可以不修改使用全局变量的代码,甚至是一个不能修改代码的库,也可以搞定。

论坛徽章:
0
4 [报告]
发表于 2013-01-05 12:12 |只看该作者
http://blog.chinaunix.net/uid-26733228-id-3309580.html
我说的是线程私有变量,对代码来说就是用同样的变量名(同样的代码流程),但是值是各线程自己的
vx我就不熟悉了)

论坛徽章:
0
5 [报告]
发表于 2013-01-05 12:32 |只看该作者
回复 4# dinglong08


    这个用法我已经知道了,还是没那么方便,无法就是用一个统一的key,再得到一个各线程唯一值。如果说有一个普通的全局问题,这个是需要修改代码才能达到可以多线程不干扰的;而对于不能修改代码的情况,就没办法了。

VxWorks的任务变量实际上是把变量的地址注册到内核中,在任务切换走时保存原来的值,切换回来再恢复出来。这种方式也有它自身的限制,一个是任务变量越多,任务切换时间越长;二是如果全局问题如果是一个大的数据结构,不修改代码也是搞不定的。

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
6 [报告]
发表于 2013-01-05 14:46 |只看该作者
linuxthread模型信号可以群发也可以独立。
I/O是指定每进程的0,1,2号文件描述符?
NPTL模型更符合POSIX标准,原则上POSIX规定信号是进程的,所以IO也应该进程的。所以不同线程的IO分离是不允许的。

另听说LZ在自己搞项目,求带路。

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
7 [报告]
发表于 2013-01-05 15:30 |只看该作者
所谓重定向其实就是dup2实现的。本质上就是将固定的文件描述符号关联新的文件。线程是共享文件描述符表的。

论坛徽章:
0
8 [报告]
发表于 2013-01-05 17:13 |只看该作者
使用线程局部变量的时候,这个 key 对所用的线程来说都是一样的啊,都用的是同一个变量,没理解你的意思

论坛徽章:
0
9 [报告]
发表于 2013-01-07 17:18 |只看该作者
回复 8# dinglong08


    是的,key是同一个变量,在能修改代码的情况下这个是可以的。我指的是有时候第三方的库/模块中有一个全局变量,没办法修改代码的情况。

论坛徽章:
0
10 [报告]
发表于 2013-01-07 17:21 |只看该作者
回复 6# smalloc


    我没看Linux中线程的实现,不过估计应该是不行的。VxWorks实际上是在任务结构中有三个固定的“任务变量”,可以按任务设置stdin/stdout/stderr,这个是它的特殊实现,在没有进程的情况下实现不同任务可以独立的定向I/O。

你听谁说我在自己做项目?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP