gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:18:31 25 4
gpt4 key购买 nike

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

它将作为一个库实现,用户将能够通过接口(interface)文件使用它。

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

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

如果 A 想要锁定某个对象,它已获得其他进程的许可,在本例中为 BC

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

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

保证所有进程都存活。

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

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

最佳答案

Should there be a separate thread for each processor running listening(polling) to the sockets?

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

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

Does that mean if I create a thread in the constructor, and use it while the process is running, and destroying it at the destructor will be just fine?

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

关于c++ - 如果我想制作分布式互斥库,我是否必须创建一个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6769237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com