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

进程间通信方式 传递数据的方式 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、写得不是很专业,很多地方没有经过特别多的求证,仅供参考。

在时间里面我们什么也不能留下,包括痛苦,快乐和生命。

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

相关文章:

你感兴趣的文章:

标签云: