c++ - 多线程环境下的文档锁定

标签 c++ multithreading language-agnostic documentation locking

<分区>

我们有一个支持二进制插件(动态加载库)的应用程序以及该应用程序的许多插件。应用程序本身是多线程的,插件也可以启动线程。为了保持数据结构的一致性,需要进行大量锁定。

一个主要问题是有时锁会在从应用程序到插件的调用之间保持。这是有问题的,因为插件代码可能想要回调到应用程序中,从而产生死锁。由于不同的团队在基础应用程序和插件上工作,这个问题变得更加严重。

问题是:除了编写大量纯文本之外,是否有一种“标准”或至少广泛使用的方式来记录锁定方案?

最佳答案

这是一种理论方法,希望对您有所帮助。

对我来说,您可以通过重新设计插件和您的应用程序通信的方式(如果可能)来避免这种情况。

插件代码不安全。为确保应用程序的灵 active 和稳定性,您必须构建一种标准方式来交换信息并使用插件进行关键操作。

最简单的方法是通过定义无锁 api 来避免管理每个特定的插件行为。 为此,您可以通过使用环形缓冲区/干扰器或仅使用操作缓冲区来使插件的关键部分异步。

编辑

对不起,如果我以同样的方式再次争论,但这在我看来就像是一个“IO”问题。

您可以并发访问某些资源(内存/磁盘/网络......不知道是哪些)并且需要以高可用性公开它们。最后,如果不锁定您的应用程序,就无法随机访问这些资源。

有了专门负责关键部分的经理,等待时间可以短到几乎察觉不到。

然而,这并不容易适用于已经存在的应用程序,尤其是大型应用程序。

如果您还不知道这类东西,我鼓励您看看“干扰器”。对我来说,这是我每次使用线程时都要考虑的现代基础知识之一。

关于c++ - 多线程环境下的文档锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20609531/

相关文章:

c++ - 利用 Visual Studio 调试器中看到的虚拟指针表地址

c# - web服务中文件下载多线程并发的问题

language-agnostic - 您选择框架或库的标准是什么?

python - 在线程内调用 dbus-python

c++ - 有什么方法可以中止 cin 或 scanf

function - 编译器如何将函数消除应用于不纯函数?

language-agnostic - 何时使用无符号值而不是有符号值?

c++ - 如何知道 C++ 中模板参数所需的接口(interface)/契约?

c++ - gdb 7.5.1 调试通过 g 4.7.2 构建的可执行文件的问题

c++ - 比较正在运行但给出错误结果的数组的简单程序