А есть mutex который умел бы для child-threads пропускать их в порядке очереди как по LOCK_GUARD?
Пример:
bool MyObject::build()
{
RECURSIVE_LOCK_GUARD(); //захватывается recursive_mutex внешним потоком
struct MyTask
{
MyAnotherObject* _another_obj;
void Run(void* args)
{
CTaskArgs* _task_args = (CTaskArgs*)args;
if (_task_args != NULL)
{
MyObject* _this = (MyObject*)_task_args->GetPointer("this");
if (_this != NULL)
{
_another_obj = new MyAnotherObject();
_this->set_default_settings(_another_obj); //deadlock!!! Некрасиво выходит. Как правильно это исправить?
};
};
};
};
MyTask my_task;
CreateThreadPoolTask<MyTask, &MyTask::Run>(&my_task); //задача кидается на свободный поток из ThreadPool
//...
};
bool MyObject::set_default_settings(MyAnotherObject* obj)
{
RECURSIVE_LOCK_GUARD();
//...
};