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