smart_lock?
От: turbocode  
Дата: 28.11.16 08:48
Оценка:
Есть паттерн смартлока который умел бы отличать внутренний вызов от внешнего?
Пример:
class A
{
protected: 
   mutex mutex_obj;

public:
   A();

   bool set_a(long a_value)
   {
       lock_guard<mutex> lock(mutex_obj); //должен срабатывать при внешнем вызове, например: A* a = new A(); a->set_a(1000);
       //....
   };

   bool exec()
   {
       lock_guard<mutex> lock(mutex_obj);
       //....
       set_a(100); //deadlock
       //....
   };   

   virtual ~A();
};

class B : public A
{
public:
   B();

   bool set_b(long b_value)
   {
       lock_guard<mutex> lock(mutex_obj);
       //....
       set_a(100); //deadlock
       //....
   };
   
   ~B();
};


Конечно можно было бы сделать так:
   bool set_a(long a_value)
   {
       lock_guard<mutex> lock(mutex_obj); 
       return set_a_internal(a_value);
   };

   bool set_a_internal(long a_value)
   {       
       //...code
   };

Но это много писанины, хотелось бы универсальности: то есть нужен какой то smartlock_guard который пропускал бы внутренние вызовы без блокировки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.