我偶尔需要延迟处理一个对象。但是,持有该对象的线程不能延迟。
一个自然的解决方案是让一个单独的线程等待这样的对象。当一个对象可用时,第二个线程将根据需要延迟并处理该对象。第二个线程将在信号量上休眠。当主线程有对象需要延迟处理时,它会将对象放入队列并向信号量发出信号。
虽然这行得通,但存在另一个程序员(或我)可能会忘记在对象排队时发出信号量的风险;我希望强制执行此操作。
因此,我可能会创建自己的容器,它基于标准容器,但添加了回调(可能使用基于策略的设计)和内部信号量。当一个项目被添加到容器时,它会强制运行回调函数。
但是这个功能看起来非常有用并且非常受欢迎,所以我敢打赌有人已经写了这个,可能比我在这里提出的设计更好,并且解决了诸如重入之类的繁琐细节。是否存在这方面的图书馆?或者,是否有获得此功能的众所周知的技术?
最佳答案
为此我使用了私有(private)继承,以及 using
声明:
struct myVec : private std::vector<int> {
// Stuff that works the same
using std::vector<int>::push_back;
using std::vector<int>::erase;
using std::vector<int>::iterator;
// Stuff that works differently:
void erase(std::vector<int>::iterator it) { ... }
};
重要的是不要使用标准容器的公共(public)继承。您将最终编写与切片和非虚拟析构函数相关的错误。
关于c++ - 用于组合容器和自定义逻辑的 C++ 技术/库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13094853/