leek me wel een algemeen topic waard
(correct me if i'm wrong
)
om te beginnen de mijne..
in mn multithreaded programma heb ik veel functies in een object die een mutex locken, iets aanpassen en daarna weer unlocken.
bijvoorbeeld:
vervolgens lekker makkelijk in het gebuik:
heel leuk en aardig, maar nu lock/unlock ik dezelfde mutex 2 keer, terwijl dat naar 1 keer had gehoeven. niet zo erg in dit geval, maar je snapt het performance-probleem bij uitgebreidere voorbeelden.
dus dan maar de locks buiten de class:
snel, maar error-prone.. je moet maar net weten welke functies een gelockte mutex behoeven, en het maakt het coden voor de eindgebruiker van je lib er niet makkelijker op.
WAT TE DOEN?!

kom dit probleem wel vaker tegen in andere contexten.. ben benieuwd hoe jullie dit oplossen
om te beginnen de mijne..
in mn multithreaded programma heb ik veel functies in een object die een mutex locken, iets aanpassen en daarna weer unlocken.
bijvoorbeeld:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| class Spatial { .. void SetPosition(const Vector3 &position) { dataMutex.Lock(); this->position = position; dataMutex.Unlock(); } void SetRotation(const Quaternion &rotation) { dataMutex.Lock(); this->rotation = rotation; dataMutex.Unlock(); } .. }; |
vervolgens lekker makkelijk in het gebuik:
C++:
1
2
| mijnFiets->SetPosition(blaPos); mijnFiets->SetRotation(blaRot); |
heel leuk en aardig, maar nu lock/unlock ik dezelfde mutex 2 keer, terwijl dat naar 1 keer had gehoeven. niet zo erg in dit geval, maar je snapt het performance-probleem bij uitgebreidere voorbeelden.
dus dan maar de locks buiten de class:
C++:
1
2
3
4
| mijnFiets->LockMutex(); mijnFiets->SetPosition(blaPos); mijnFiets->SetRotation(blaRot); mijnFiets->UnlockMutex(); |
snel, maar error-prone.. je moet maar net weten welke functies een gelockte mutex behoeven, en het maakt het coden voor de eindgebruiker van je lib er niet makkelijker op.
WAT TE DOEN?!
kom dit probleem wel vaker tegen in andere contexten.. ben benieuwd hoe jullie dit oplossen