如果我想制作分布式互斥库,我是不是必须创建一个线程?

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想要锁定某个对象,它已经获得了其他进程的许可,在这种情况下是BC

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

以上是关于如果我想制作分布式互斥库,我是不是必须创建一个线程?的主要内容,如果未能解决你的问题,请参考以下文章

同时从多个线程访问只读数据是不是明智?

C#多线程 一个缓冲队列,一个生产者线程,一个消费者线程,这两个线程同时操作这个队列,必须加互斥锁吗

如果只有一个线程使用互斥锁,跨线程的共享内存会损坏吗?

使用信号量的进程之间的互斥[关闭]

c# 多线程互斥问题。。

使用互斥锁后程序仍然崩溃(我可以在同一个线程中使用互斥锁吗?)