У меня есть класс С++, который выделяет много памяти. Он делает это, вызывая стороннюю библиотеку, которая предназначена для сбоя, если она не может выделить память, и иногда мое приложение создает несколько экземпляров моего класса в параллельных потоках. При слишком большом количестве потоков у меня происходит сбой. Моя лучшая идея для решения - убедиться, что никогда, скажем, не работает более трех экземпляров одновременно. (Хорошая ли это идея?) И моей лучшей идеей на данный момент для реализации это является использование повышающего мьютекса. Что-то вроде следующего псевдокода,
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...