码迷,mamicode.com
首页 > 编程语言 > 详细

进程及线程间通信方式总结

时间:2015-03-15 09:31:35      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:

进程间通信方式
    传递数据的方式
        1.pipe
                必须是有亲缘关系的进程之间使用,平时用"ls | grep abc"等命令时用得就是这个,这个"|"我猜测是用了两种系统调用实现,一个是pipe(popen),一个是dup2,没有看过bash或sh的源码,只是猜测。
        2.fifo
                会在文件系统中产生一个管道文件。
        3.socket
                有一个unix域套接字,可用作进程间通信,但有说法posix消息队列的性能优于systemv消息队列,systemv消息队列性能优于unix域套接字。
        4.posix 消息队列
                写程序该选到systemv消息队列的时候,大部分可以用posix消息队列代替,因为他的性能更好。
        5.systemv 消息队列
                gcc下不用链接库就可以使用,posix的线程和消息队列分别需要链接pthread库和rt库
        6.systemv 共享内存
                传递数据方式更灵活。
    同步方式
        1.信号
        2.systemv 信号量
                不同于pthread信号量,它需要一个key,以在不同进程间标识每个信号量资源。
    


线程间通信方式
    传递数据的可用方式
        1.全局变量
        2.堆内存
        3.任何进程间可用的传递数据方式
    同步方式
        1.pthread 互斥锁
                有自旋锁、读写锁、互斥锁三种类型
        2.pthread 条件变量
                与互斥锁一块可完成一个生产者与消费者的模型
        3.pthread 信号量
                可单独实现一个生产者和消费者的模型
        4.任何进程间可用的同步方式




1、参考资料:精通Linux C编程 (虽然名子很山寨,但觉得这本书写得很全,作为资料查阅感觉许多时候,比APUE都强。网上也有人说这本书有很多错误,至少目前还没有见过一个我确定是错误的地方)
2、关于一个全局的int变量读写是不是需要加锁的问题。见过很多帖子讨论这个问题,但没有见过一个能信服的答案。自己用起来在一些比较简单的情况下x没有加锁,比如只有两个线程共用一个变量,一个线程只读,另一个线程只写。有人说,容易引起core dump,但至少我还没有见过这种情况。
3、写得不是很专业,很多地方没有经过特别多的求证,仅供参考。

进程及线程间通信方式总结

标签:

原文地址:http://blog.csdn.net/langsim/article/details/44264483

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!