【问题标题】:Forking a child or threading?分叉一个孩子或线程?
【发布时间】:2014-07-02 18:41:34
【问题描述】:

我有一个服务器-客户端系统..每个客户端都映射服务器上找到的文件。一旦客户端更新文件,服务器需要通知客户端更新他们的文件..即他们应该再次取消映射和映射文件。我认为解决这个问题的方法是使用 write() (在服务器端)向客户端发送一个字符串“Update”......并使用 read() 执行无限循环以继续等待这样的“Update” )(在客户端)。但是,这个 while 循环应该在某种线程或子进程中。哪个最好?还有其他建议吗?非常感激。提前致谢。

【问题讨论】:

  • 如果使用 MAP_SHARED 打开文件,更新将立即可见。无需 unmap() 和 mmap()。您仍然需要您的“更新”信号,并且可能需要共享互斥锁来同步访问。

标签: c multithreading client-server fork


【解决方案1】:

研究使用套接字和选择语句。通过这样的设置,您可以进行基于事件的编程

【讨论】:

  • 嗨乔希,感谢您的建议。我已经搜索过在客户端使用 select() ,但是,我仍然不清楚如何在我的场景中应用它。请问您可以进一步解释吗?感谢您的帮助!
【解决方案2】:

服务器可以发送一个signal,客户端会捕获它并采取相应的行动。

只需注意您的信号处理程序将执行的操作(在信号处理的上下文中调用许多函数是不安全的)。

还要注意比赛条件并注意不要丢失信号。

【讨论】:

  • 那么是否可以从服务器发送信号到客户端?
  • @user3770009,哎呀。对不起。我以为您的客户端在服务器的同一台机器上(可能是因为 mmap())。对不起,忽略它。
  • 不过,您可以将套接字方法与 SIGIO 一起使用(而不是 select)。
  • 忘记 SIGIO,因为处理程序应该调用 select() 以了解它来自哪个文件描述符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多