CriticalSection als Membervariable
-
Ich hab direkt noch eine Frage:
Ist es sinnvoll eine Membervariable einer Klasse als CriticalSection zu verwenden und somit innerhalb der Klasse den Zugriff auf bestimmte andere Membervariablen zu steuern oder ist das nicht möglich?Ich meine sowas in der Art:
class A { private: int iWert; CRITICAL_SECTION m_CriticalSection; public: A() { InitializeCriticalSection(&m_CriticalSection); iWert = 0; }; void inc() { if (TryEnterCriticalSection (&m_CriticalSection)) { ++iWert; LeaveCriticalSection(&m_CriticalSection); } }; void dec() { if (TryEnterCriticalSection (&m_CriticalSection)) { --iWert; LeaveCriticalSection(&m_CriticalSection); } }; }
Oder ist es besser diese CriticalSection als globale Variable zu deklarieren?
Danke für Antworten
-
Wenn Du viele Objekte vom Typ A hast wird durch eine globale CriticalSection der Zugriff immer nur auf eine zu einer Zeit erlaubt. Ist die CriticalSection eine Memeber variable, dann wird der Zugriff auf nur genau dieses Objekt synchronisiert!
Beides kann Sinn machen. Was willst Du?
-
Da hätte ich auch selber drauf kommen können ;)... ich will das erste :D... also ist es so richtig wie angedacht als Membervariable
oder?!
Danke auf jedenfall!
-
wenn ich nun class A und class B haben, jede klasse enthält einen Workerthreas. Klasse A liest, und Klasse B schreibt ! muss ich nun ein allgemeines CrircalSection Objekt für die jeweilgen Instanzen der Klassen verwenden?
-
wenn ich nun class A und class B haben, jede klasse enthält einen Workerthreas. Klasse A liest, und Klasse B schreibt ! muss ich nun ein allgemeines CrircalSection Objekt für die jeweilgen Instanzen der Klassen verwenden?
Das ist aus meiner Sicht nicht direkt zu beantworten... Schreiben beide Klassen auf eine globale Variable? Oder wohin schreiben diese? Wenn Sie in eine Klasse C schreiben durch zwei Zugriffsmethoden kannst du in Klasse C die CriticalSection definieren und dann in den Methoden prüfen, ob ein Zugriff möglich ist. Wenn es sich aber um eine globale Variable handelt brauchst du meiner Ansicht nach auch eine globale CriticalSection.
-
jepp ich hab bspw. Klasse OUT , Klasse IN und Klasse DATA
über die Klasse OUT verwende ich die get-Methoden der DATA Klasse, und in der Klasse IN die SET-Metodhen der DAta klassen...
hast du schon ein beispiel mit deinen CCritical Sektions??
ich dachte ich muss in den jeweilien Workerthread die DATA Klasse (objekt) fü+r die anderen Workletrhead Blockieren solange geschreiben bzw. gelsen wird.
ein beispiel wäre nett... :p
-
Es gibt eine Multiple-Reader Single-Writer Implementierung unter www.codeproject.com wunderschön in einer Klasse.
-
hier ein schöner link den ich gefunden habe:
-
Nein ich meinte diese Klasse:
http://www.codeproject.com/threads/ReaderWriterLock.asp