【发布时间】:2014-03-20 21:44:50
【问题描述】:
我有一个分配大量内存的 c++ 类。它通过调用一个第三方库来做到这一点,该第三方库被设计为在无法分配内存时崩溃,有时我的应用程序会在并行线程中创建我的类的多个实例。线程太多我崩溃了。 对于解决方案,我最好的想法是确保永远不会有超过三个实例同时运行。 (这是一个好主意吗?) 我目前实现 that 的最佳想法是使用 boost 互斥锁。类似于以下伪代码的内容,
MyClass::MyClass(){
my_thread_number = -1; //this is a class variable
while (my_thread_number == -1)
for (int i=0; i < MAX_PROCESSES; i++)
if(try_lock a mutex named i){
my_thread_number = i;
break;
}
//Now I know that my thread has mutex number i and it is allowed to run
}
MyClass::~MyClass(){
release mutex named my_thread_number
}
如您所见,我不太确定此处互斥锁的确切语法。所以总结一下,我的问题是
- 当我想通过限制线程数来解决内存错误时,我是否走在正确的轨道上?
- 如果是,我应该使用互斥锁还是其他方式?
- 如果是,我的算法是否合理?
- 是否有一个很好的例子说明如何将 try_lock 与 boost 互斥锁一起使用?
编辑:我意识到我在谈论线程,而不是进程。 编辑:我正在参与构建一个可以在 linux 和 Windows 上运行的应用程序......
【问题讨论】:
-
你能不能只在某个地方保留一个随着每次创建实例而递增的静态变量,其中新实例的创建取决于所述变量低于您设置的限制?
-
为什么你的问题一半谈论线程,一半谈论进程?
-
@jalf :对不起,我的意思是线程。我混淆了这些概念。
-
@MMJZ 一个静态变量听起来很诱人,但没有办法使构造安全免受崩溃,有没有......?
标签: c++ boost boost-mutex