桃源谷

心灵的旅行

人生就是一场旅行,不在乎旅行的目的地,在乎的是沿途的风景和看风景的心情 !
posts - 32, comments - 42, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

06 2008 档案

     摘要: 在高级语言例如C++中有效的使用共享内存并不是一件浅显易懂的事情,但是它也能克服这些内在的困难。这篇文章描述了在Linux上使用共享内存的两个C++设计模式并包含了样例代码,以及给读者打开了更有效的进程间通信的一扇门。

在面向对象系统中,当一个对象接收到一个消息时它能够发送一套事件。这些事件主要在同步模式下被处理。这个调用进程或者线程在发送消息调用完成之前,发送给对象一个消息和处理事件。然而,如果这个对象送出这些被更多的进程共享以及驻留在内存里的事件,情况就稍微的发生了一些变化。

这篇文章用两个C++的设计模式详细的描述了上述的情况,并且用一些例子程序阐明了解决方案。
  阅读全文

posted @ 2008-06-01 21:41 lymons 阅读(861) | 评论 (0)  编辑 |

     摘要: Unix跟Windows等那些”对于开发者易于使用”的OS比起来,在信号和线程的利用方面有诸多的限制。但是即使不知道这些知识就做构架设计和实现的情况也随处可见。这个就是那些经常不能再现的bug的温床吧。

因此,我想分成几回来写一些准则来防止陷入到这些圈套里。

准则1:不依赖于信号收发的设计

·给其他进程以及自己发送异步信号并改变处理流程的设计不要做

异步信号是值用kill系统调用来创建?发送的信号、例如SIGUSR1,SIGUSR2,SIGINT,SIGTERM 等
简单的使用忽略信号(SIG_IGN)则没有问题
·不要把线程和信号一起使用
  阅读全文

posted @ 2008-06-01 20:27 lymons 阅读(1356) | 评论 (0)  编辑 |

     摘要: 准则2: 要知道信号处理函数中可以做那些处理
· 在用sigaction函数登记的信号处理函数中可以做的处理是被严格限定的
· 仅仅允许做下面的三种处理
1. 局部变量的相关处理
2. “volatile sig_atomic_t”类型的全局变量的相关操作
3. 调用异步信号安全的相关函数
· 以外的其他处理不要做!  阅读全文

posted @ 2008-06-01 20:22 lymons 阅读(2231) | 评论 (0)  编辑 |

     摘要: 在多线程程序里,在”自身以外的线程存在的状态”下一使用fork的话,就可能引起各种各样的问题.比较典型的例子就是,fork出来的子进程可能会死锁.请不要,在不能把握问题的原委的情况下就在多线程程序里fork子进程.  阅读全文

posted @ 2008-06-01 20:16 lymons 阅读(13007) | 评论 (0)  编辑 |

我的个人简历第一页 我的个人简历第二页