【问题标题】:Should I have to create a thread if I want to make distributed mutex library?如果我想制作分布式互斥库,我是否必须创建一个线程?
【发布时间】:2011-07-20 22:19:11
【问题描述】:

我正在尝试使用 C++ 编写一个简单的锁定/解锁算法,该算法的行为类似于分布式系统中的互斥锁。

它将被实现为一个库,用户将能够使用接口文件来使用它。

假设有 3 个进程 {A,B,C}。

每个处理器都知道其他进程的地址和端口等等。

如果A想要锁定某个对象,它已经获得了其他进程的许可,在这种情况下是BC

我相信发送和等待B的回复,C不会有问题,因为用户肯定会调用该函数。

但是,BC应该如何接收消息呢?

保证所有进程都处于活动状态。

是否应该为每个运行侦听(轮询)套接字的处理器设置一个单独的线程?

这是否意味着如果我在构造函数中创建一个线程,并在进程运行时使用它,然后在析构函数中销毁它就可以了?

【问题讨论】:

    标签: c++ multithreading sockets synchronization


    【解决方案1】:

    是否应该为每个运行的处理器有一个单独的线程 监听(轮询)套接字?

    您应该为Inter-Process Communication 使用库,除非您打算从头开始构建类似的东西作为练习。如果您想自己构建一些东西,请阅读该维基百科文章以及操作系统书籍中的一些章节(如 Tanenbaum 或 Silberschatz)。

    关于您在分布式系统中的具体互斥问题,请参阅Maekawa's Algorithm

    这是否意味着如果我在构造函数中创建一个线程并使用它 在进程运行时,在析构函数中销毁它会 没事吧?

    如果您打算这样实现它,为什么不呢。分布式系统通常使用分层方法(参见 http://www.erlang.org/course/error_handling.html 以 Erlang 教程为例)。层本质上是通信和交叉依赖进程的集合,它们为了一个共同的目标一起工作。这些过程中的一个可以充当与较低层的连接,而另一个过程可以充当与较高层的连接。您可以使用线程在一个操作系统进程中实现完整的层,线程在进程创建时创建并在销毁进程时销毁。这一切都取决于你想要达到什么目标以及你走哪条路。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 2015-04-12
      • 1970-01-01
      相关资源
      最近更新 更多