社区
系统维护与使用区
帖子详情
请问Linux线程间通信可以用管道吗
joyself
2005-02-24 10:03:47
是这样的:
做一个进度条,
在从线程里read/write,并将进度传给主线程。如何弄?
我知道进程间是pipe(),线程如何弄?
在Linux下线程和进程实现应该不同吧,有没有效率差别?
谢谢
...全文
741
9
打赏
收藏
请问Linux线程间通信可以用管道吗
是这样的: 做一个进度条, 在从线程里read/write,并将进度传给主线程。如何弄? 我知道进程间是pipe(),线程如何弄? 在Linux下线程和进程实现应该不同吧,有没有效率差别? 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bzCpp
2005-02-25
打赏
举报
回复
我觉得用回调函数解决这个问题比较简单:
主线程在创建子线程时给子线程一个CallBack指针,子线程每写入若干字节就调一次Callback。
主线程在Callback里刷新进度条的显示。至于是否需要同步,那就看你的具体需要了
ringerxyz
2005-02-24
打赏
举报
回复
直接用一个全局变量不可以吗?你只要实现互斥访问就可以了
city_goal
2005-02-24
打赏
举报
回复
namepipe就可以了
参看 浙大的那本砖头书 第一本最后一章
joyself
2005-02-24
打赏
举报
回复
to ringerxyz(rin)
对于全局变量,隔一段时间查询会使得进度条看起来不连续,
我想让它更连续些而已 :) 。
tengulre
2005-02-24
打赏
举报
回复
yes
ringerxyz
2005-02-24
打赏
举报
回复
当然,你也可以采用信号,当写线程写了数据后就发信号给所在的进程,然后在信号的处理函数中更新进度条
ringerxyz
2005-02-24
打赏
举报
回复
凭什么说全局变量不可以呢?
你设置一个全局变量,比如说int g_Status;
然后在写线程里把写的字节数传给g_Status,然后主线程每隔一定的时间去读g_Status不就行了吗?
我觉得楼主没有把线程和进程的区别搞清楚,同一个进程中还用pipe干吗?
joyself
2005-02-24
打赏
举报
回复
全局变量不行
我需要这样得到,子线程每一次write若干字节,我就将完成的进度
传给 主线程, 而主线程就要读取该 进度。
我知道进程是这样的
int fd[2];
pipe(fd);
if( ( pid = fork() ) == 0 ) {
close(fd[0]);
write(fd[1],...);
}
else (pid > 0) {
close(fd[1]);
read(fd[0], ...);
}
请问一下如果是用进程, 用什么方法来同步,即
每拷贝一次,就执行一次write(fd[1]...)
什么时候知道父进程该读了呢 即可以read(fd[0])了呢?
而对于线程。 我都不知道如何创建一个pipe,使得主从线程都可以
访问。 对于如何同步 我更不清楚了.
哪位大侠能不能解释详细点 ,最好给个sample code。
小弟感激不尽
sharkhuang
2005-02-24
打赏
举报
回复
完全没问题!
还可以用消息队列!
线程和进/线程
管道
通信实验(操作系统实验报告二)
通过
Linux
系统中线程和
管道
通信机制的实验,加深对于线程控制和
管道
通信概念的理解,观察和体验并发进/线程间的通信和协作的效果 ,练习利用无名
管道
进行进/
线程间通信
的编程和调试技术
嵌入式
Linux
中的进程/
线程间通信
机制研究
进程/线程相互间的通信,包括父子进程间采用有名
管道
进行通信、进程间共享内存和消息队列通信、信号通信。
Windows与
Linux
下进程间通信技术比较
windows和
linux
的共有的通信方式和一些区别
浅谈
Linux
进程间通信方式及优缺点
1)
管道
管道
分为有名
管道
和无名
管道
无名
管道
是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系一般指的是父子关系。无明
管道
一般用于两个不同进程之间的通信。当一个进程创建了一个
管道
,并调用fork创建自己的一个子进程后,父进程关闭读
管道
端,子进程关闭写
管道
端,这样提供了两个进程之间数据流动的一种方式。 有名
管道
也是一种半双工的通信方式,但是它允许无亲缘关系进程间的通信。 2)信号量 信号量是一个计数器,可以用来控制多个线程对共享资源的访问.,它不是用于交换大批数据,而用于多线程之间的同步.它常作为一种锁机制,防止某进程在访问资源时其它进程也访
Linux
环境C语言调用Mplayer实现音乐播放器(其中缺少了一个FIFO
管道
文件)
C语言字符串处理、
Linux
系统编程、多进程、多线程、进程间通信、线程同步、实现的功能有暂停、快进、快退、显示歌词、单曲循环、列表循环、随机播放、声音调节等
系统维护与使用区
19,612
社区成员
74,603
社区内容
发帖
与我相关
我的任务
系统维护与使用区
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
复制链接
扫一扫
分享
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章