2017-10-09 1 views
0

Ich habe ein Szenario, bei dem auf eine Funktion (Codeblock) durch n verschiedene Callback-Funktionen zugegriffen wird. Wenn zur gleichen Zeit mehr als ein Callback die Funktion aufruft, muss ich einen Mutex in die Funktion einfügen, so dass nur ein Callback auf diesen gleichzeitig zugreifen kann und der andere Callback auf den ersten im kritischen Bereich warten muss . Ist das richtige Design? Gibt es alternative Designs? Gibt es eine Möglichkeit, den zweiten Rückruf nicht zu warten, während der erste Rückruf verarbeitet wird?Gleicher Codeblock, auf den von verschiedenen Callbacks gleichzeitig zugegriffen wird

+2

Diese Funktion wird als Wiedereintrittsfunktion bezeichnet und wird ordnungsgemäß ausgeführt, wenn sie alle lokalen Variablen oder Instanzvariablen verwendet müssen die Funktion oder Teile davon, die gemeinsame/globale Variablen verwenden, synchronisieren –

Antwort

1

Hängt von dieser Funktion ab.

Ändert Shared Memory?
Verwendet es andere Funktionen, die Rennbedingungen zeigen?

Wenn die Antwort ja lautet, müssen Sie Sperren anwenden und die Prozesse synchronisieren.
Die Sperre vom Anfang bis zum Ende dieser Funktion ist wenig sinnvoll. Wenden Sie die Sperre nur vor und nach dem kritischen Abschnitt an (dh Codestück, an dem die gemeinsamen Daten aktualisiert (geschrieben) werden)

Verwandte Themen