Dans la plupart des codes je l'ai écrit ou révisé, le verrouillage est réalisée par composition, où une classe possède une section critique ou mutex:verrouillage par héritage plutôt que la composition
class MyClass
{
Mutex mMutex;
};
et lorsque les membres mutables peuvent potentiellement être accessible via plusieurs threads, nous acquérons et libérer le verrou par RAII comme ceci:
void MyClass::Method()
{
Lock lock(mMutex);
// ...
}
Aujourd'hui, je passé en revue un code où le code a mis en œuvre le verrouillage par héritage, comme ceci:
class MyClass : public Mutex
{
// ...
};
Et verrouillage est effectué par le verrouillage de classe « lui-même »:
void MyClass::Method()
{
Lock lock(this);
// ...
}
Y a-t-il des avantages ou des inconvénients de cette approche? Ou est-ce juste un problème de style?
vous devrez être plus précis, en particulier sur la partie «mutex héritée». A-t-il été hérité d'une interface ou d'un objet de synchronisation réel? – YeenFei
@YeenFei - il a été hérité d'un objet de synchronisation réel (c'est-à-dire concret). – LeopardSkinPillBoxHat