请问Linux线程间通信可以用管道吗

joyself 2005-02-24 10:03:47
是这样的:
做一个进度条,
在从线程里read/write,并将进度传给主线程。如何弄?
我知道进程间是pipe(),线程如何弄?

在Linux下线程和进程实现应该不同吧,有没有效率差别?


谢谢
...全文
741 9 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
完全没问题!
还可以用消息队列!

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧