c++ - 线程池共享资源锁定问题

标签 c++ multithreading locking

我有一个使用线程池实现的基于 UDP 的应用程序。

消息被推送到队列中,当队列中有事情要做或有消息时,线程池就会被唤醒。线程池处理每个消息并将它们传递给 持有一些状态的 session 对象。即 UDP 数据包是 session 的一部分, session 正在重组一大块数据。

该 session 对象需要访问共享资源。但是,另一个 session 对象也可以从资源中读取,但不能在写入时读取。

现在的问题是 session 对象的 DoWork 方法可以从不同的线程调用,我需要防止任何人写入它。因此,为此我需要锁定资源。

问题就出在这里。如果我使用标准互斥体,它不能在线程之间移植,所以我将尝试访问资源并且应该能够将数据放入资源中,但我不能,除非我是锁定资源的原始线程。

好像我需要一个 session key 来访问资源而不是我的 线程 ID。

我该如何解决这个问题?在这种情况下,这里的 boost shared_mutex 似乎有点受限。

最佳答案

听起来你想要一个 reader/writer lock .

关于c++ - 线程池共享资源锁定问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3974281/

相关文章:

c++ - 禁用类指针递增/递减运算符

c++ - 在定义之前显式实例化模板函数

java - Java编译器优化可以消除 volatile

crash - 硬崩溃后如何修复TeamCity共享资源锁?

assembly - 关于多核CPU的x86 LOCK问题

synchronization - 如果不同处理器中的两个进程试图同时获取锁会发生什么

c++ - 如何在C++中读取格式化文件

c++ - `std::enable_if<std::is_compound<double>::value>` 出现意外的 SFINAE 行为

c# - 如何将 winform 子窗体动态嵌入到主 winform 的选项卡控件中?

c++ - 在 C++ 类中运行线程