Linux线程同步问题请教

nerk 2006-09-28 03:28:21
有两个线程需要通讯,大量数据需要从一个线程传递给另一个线程,有点类似管道的意思。

请问如何设计才能让数据有效的传递?

使用的pthread, 谢谢!
...全文
3933 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveisbug 2006-10-31
  • 打赏
  • 举报
回复
你只考虑问题的一个方面,单说不加锁和加锁的效率,单说加锁,是有代价。
我们讨论的是解决楼主传递数据的问题,不用信号量,可能会增加无用的调度、比较、又放弃的动作。
loveisbug 2006-10-17
  • 打赏
  • 举报
回复
“有可能”,“某些时候”,这个我说不好,这个我实在说不好,呵呵。
前面我说了,每次都过来比较比较走人,效率高不了。
netfairy 2006-10-17
  • 打赏
  • 举报
回复
唉,最后一次回复,你可以自己去看资料,其实我也没有必要教你。
在P4之前,lock指令百分之一百锁总线;到了P4,Intel为了提高性能,当变量存在在cache中的时候,可以只锁cache,然后通过cache保持一致性的机制来达到加锁的效果,如果不在cache中还是直接锁总线。这就是我说“有可能”的原因,怕你不懂还特意在括号里说了另一种可能的情况。
netfairy 2006-10-16
  • 打赏
  • 举报
回复
倒是可以说说效率如何低:D
semaphore之类的线程锁的实现中,随便看都有好多lock前缀的汇编代码,也就是说很有可能要锁总线(某些时候只需要锁单个cpu的cache),而锁总线的代价嘛~~~命好几百个周期,命不好上千。
loveisbug 2006-10-15
  • 打赏
  • 举报
回复
倒是说说效率是如何高的
netfairy 2006-10-13
  • 打赏
  • 举报
回复
第一次听说不加锁会比加锁效率低-_-b
看样子现在学多线程,已经变成学怎么加锁了。。。
NNBWOLF 2006-10-12
  • 打赏
  • 举报
回复
信号量是实现同步的最好方式,其实pthread_cond_signal也不能很好的完成同步.
athunwer 2006-10-12
  • 打赏
  • 举报
回复
分析你的说法大量数据从一个线程到另一个线程(像管道)
1,线程a可能只写,线程b只读;
2,所传递的数据量很大;
3,两个线程在一个进程下(不使用命名管道);
其实,这样的通讯是最寻常的,win下也很多
使用一个很大的内存“共享”
然后两个线程异步访问这块内存
信号量就可以解决问题
netfairy 2006-10-11
  • 打赏
  • 举报
回复
不用加锁的原因:

7.1.1. Guaranteed Atomic Operations
The Pentium 4, Intel Xeon, P6 family, Pentium, and Intel486 processors guarantee that the
following basic memory operations will always be carried out atomically:
• Reading or writing a byte.
• Reading or writing a word aligned on a 16-bit boundary.
• Reading or writing a doubleword aligned on a 32-bit boundary.
loveisbug 2006-10-11
  • 打赏
  • 举报
回复
这是没错,但是效率低。每次读写都要比较读写指针,判断是否读或写。如果写指针追上读指针,就只能一次次做判断、走人的事,同样,如果读指针追上写指针。
用信号量,既保证了内存安全,也做好了同步。
xubai 2006-10-09
  • 打赏
  • 举报
回复
多队列交换缓冲区,不需要系统调用.比共享内存,消息队列,管道都快.
goodgod105 2006-10-08
  • 打赏
  • 举报
回复
up
besthyq 2006-10-08
  • 打赏
  • 举报
回复
应该就是通过全局变量来传递的吧。~~~~~~~~~~~~~

hedingsheng 2006-10-07
  • 打赏
  • 举报
回复
UP
yaopg 2006-10-07
  • 打赏
  • 举报
回复
加点锁阿什么的,实在不行分点页。又或者自创个啥子数据结构不就OK了。
jtg98g3 2006-10-05
  • 打赏
  • 举报
回复
UP
foochow 2006-10-05
  • 打赏
  • 举报
回复
netfairy(泡泡猪) 正解。。
loveisbug 2006-10-04
  • 打赏
  • 举报
回复
一个读一个写,怎么不需要锁呢?
netfairy 2006-10-03
  • 打赏
  • 举报
回复
一个读一个写,是不需要加锁的!用一个循环链表即可
wjlsmail 2006-10-02
  • 打赏
  • 举报
回复
主进程接收到数据后创建子进程处理
加载更多回复(11)

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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