困惑中:进程的同步方法有哪些?进程的通讯方法有哪些? 同步与通讯有什么区别?Windows下的 和linux下的有什么不同的

alixccc 2005-11-06 09:45:38
我看了很多网页 说的都好乱阿? 搞不清 到底哪个是同步方法 哪个是通讯的方法? 有的就混为一谈

高人帮我介绍一下,或者提供一些资料!!!!!!!!
...全文
2774 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
熊主任 2006-05-22
mark一下以后看
回复
dch4890164 2006-05-19
mark
回复
goke 2006-05-19
Mark
回复
citywanderer2005 2006-03-08
mark
回复
msvcp60 2006-02-17
进程通信一般用 消息和事件
回复
updatedb 2006-02-17
引用:http://community.csdn.net/Expert/TopicView3.asp?id=4374496
linux下进程间通信的几种主要手段简介:

1. 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
2. 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数 sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal 函数);
3. 报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
4. 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
5. 信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
6. 套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。
回复
terryjwf 2005-12-16
偶是新来的,在此发表一下我的浅薄见解:
对于windows、linux下的不太清除,我知道嵌入式实时操作系统方面的任务通信和同步,现以ucleus抢先式多任务实时操作系统为例说明之。
嵌入式中的任务可以理解为windows中的进程,任务通信和任务控制可以理解为进程通信和进程控制(本人理解)。在nucleus实时操作系统中操作系统中,任务间的消息传递包含邮箱、管道、队列,任务间的相互控制包含信号量、信号和事件标志集。邮箱能传递4个32为的字长度的消息,消息的长度是严格限制的。队列主要用于传送多个消息,每个队列可以包含一个或多个32位长的字,支持固定或可变长度的消息格式。管道主要用于传递多个消息,没个管道可以包含一个或多个字节,支持固定或可变长度的消息格式。信号量主要用于对关键性资源的保护,即主要任务间的互斥控制;事件标志集主要用于任务间的同步控制;信号用于任务之间的异步控制。总结:
任务通信:邮箱、管道、队列。
任务控制:信号量(任务互斥控制)、事件标志集(任务同步控制)、信号(任务异步控制)。
回复
lujun-cc 2005-12-06
只知道Windows下的,对于Linux下,不清楚!

进程通信也就是所谓的IPC问题,主要是指进程间交换数据的方式,在Windows下,主要有以下几种:内存映射、管道、消息等,但是内存映射是最基础的,因为,其他的进程通信手段在内部都是考内存映射来完成的。

在Windwos中,进程间同步主要有以下几种:互斥量、信号量、事件、可等计时器等几种技术。
回复
cber 2005-12-05
路过顺便提一下,SMP系统下和UP系统下的同步有点区别
回复
Wolf0403 2005-11-11
If hFile is INVALID_HANDLE_VALUE, the calling process must also specify a mapping object size in the dwMaximumSizeHigh and dwMaximumSizeLow parameters. In this scenario, CreateFileMapping creates a file mapping object of a specified size that the operating system paging file backs, instead of by a named file in the file system.

http://msdn.microsoft.com/library/en-us/fileio/base/createfilemapping.asp

拍手,叹服一下。
回复
Wolf0403 2005-11-11
路过一下……据说 Win32 没有 SysV Shared Memory 的对应物,只有 File Mapping?有没有谁确认一下?
回复
XXandOO 2005-11-10
windows下的进程同步和通讯主要靠各种内核对象(互斥,信号,事件,文件影射),比较有特色的是窗口消息,dde/ole/com也可以使用rpc机制进行进程间通讯。同步和通讯的目的是一样的,实现进程间数据共享,同步只是为了做到处理协同。共享内存在Win9X平台上是有的,在NT内核以后就没有这一说了,因为进程地址空间不再有共用部分。
回复
bm1408 2005-11-07
去我的BLOG吧~
WIN下的,我总结的很全了~~
回复
wshcdr 2005-11-07
WINDOWS下的同步有四种方式
互斥量,临界区域,信号量,事件对象
回复
wshcdr 2005-11-07
COM 不知道是怎么传递对象的?

///////////////////////////
com通过类厂来传递对象
但是这个对客户端是透明的
客户只需要调用 CoCretaeInstance()就可以得到想要的对象的接口指针
回复
oyljerry 2005-11-07
Windows同步的方法主要就是互斥,临界区 信号量 内核事件等,
回复
Wolf0403 2005-11-06
>> 可以终端接收进程执行过程的特殊 IPC 方式
改为 可以中断(打断)接收方当前执行过程的……

Win32 下面,我知道的通信方式有几个:

socket 是有的,然后是 Pipe 管道和命名管道(比 Unix 的管道强悍的多,口水一个),FileMapping 是有的,共享内存没有太大印象,另外还有一个所谓的 mail slot,看到过,没见过人用…… COM 不知道是怎么传递对象的?

同步对象有 Mutex 和 EventObject,Semaphore 信号量应该也有只是记不得。另外很重要的一个就是 Windows Message,应该是高阶的、经过封装的同步方式,但是非常好用。IOCP、异步 socket 和窗口信息都是 Windows Message 传递的。
回复
Wolf0403 2005-11-06
说说我熟悉一点的 Linux

通信就是说进程之间传递数据。常见的方法有 pipe(管道),FIFO(命名管道),socket(套接字),SysVIPC 的 shm(共享内存)、msg queue(消息队列),mmap(文件映射)。以前还有 STREAM,不过现在比较少见了(好像)。

同步的意思是说,让不同进程能够在同时到达一个已知的特定状态之前等待另一方的执行。Linux 下常见的同步方法有SysVIPC 的 sem(信号量)、file locking / record locking(通过 fcntl 设定的文件锁、记录锁)、futex(基于共享内存的快速用户态互斥锁)。针对线程(pthread)的还有 pthread_mutex 和 pthread_cond(条件变量)。
除了这些特定的同步对象之外,还有一些同步方法是与通信方法不可分离的,包括:对 pipe/FIFO/socket 和 msg queue 的阻塞等待、对子进程退出事件的等待(wait族)、对线程退出时间的等待(pthread_join)

另外还有一个不能不提的,就是信号。Unix 信号是异步处理的、可以终端接收进程执行过程的特殊 IPC 方式——其实既可以算同步也可以选通讯了。

Linux 下的 IPC,不说别的,就一个字儿——乱! -_-#
回复
相关推荐
发帖
工具平台和程序库
创建于2007-09-28

2.4w+

社区成员

C/C++ 工具平台和程序库
申请成为版主
帖子事件
创建了帖子
2005-11-06 09:45
社区公告
暂无公告