如果我想制作分布式互斥库,我是不是必须创建一个线程?
Posted
技术标签:
【中文标题】如果我想制作分布式互斥库,我是不是必须创建一个线程?【英文标题】: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
想要锁定某个对象,它已经获得了其他进程的许可,在这种情况下是B
和C
。
我相信发送和等待B的回复,C不会有问题,因为用户肯定会调用该函数。
但是,B
和C
应该如何接收消息呢?
保证所有进程都处于活动状态。
是否应该为每个运行侦听(轮询)套接字的处理器设置一个单独的线程?
这是否意味着如果我在构造函数中创建一个线程,并在进程运行时使用它,然后在析构函数中销毁它就可以了?
【问题讨论】:
【参考方案1】:是否应该为每个运行的处理器有一个单独的线程 监听(轮询)套接字?
您应该为Inter-Process Communication 使用库,除非您打算从头开始构建类似的东西作为练习。如果您想自己构建一些东西,请阅读该***文章以及操作系统书籍中的一些章节(如 Tanenbaum 或 Silberschatz)。
关于您在分布式系统中的具体互斥问题,请参阅Maekawa's Algorithm。
这是否意味着如果我在构造函数中创建一个线程并使用它 在进程运行时,在析构函数中销毁它会 没事吧?
如果您打算这样实现它,为什么不呢。分布式系统通常使用分层方法(参见 http://www.erlang.org/course/error_handling.html 以 Erlang 教程为例)。层本质上是通信和交叉依赖进程的集合,它们为了一个共同的目标一起工作。这些过程中的一个可以充当与较低层的连接,而另一个过程可以充当与较高层的连接。您可以使用线程在一个操作系统进程中实现完整的层,线程在进程创建时创建并在销毁进程时销毁。这一切都取决于你想要达到什么目标以及你走哪条路。
【讨论】:
以上是关于如果我想制作分布式互斥库,我是不是必须创建一个线程?的主要内容,如果未能解决你的问题,请参考以下文章