/ / Kann man davon ausgehen, dass get-method Thread-sicher ist, wenn nicht anders angegeben - C ++, Thread-Sicherheit, Getmethod

Kann man davon ausgehen, dass die get-Methode threadsicher ist, wenn nicht anders angegeben? - C ++, Thread-Sicherheit, getmethod

Kann man generell von Thread-Sicherheit ausgehenGet-Methoden wenn nicht anders in der Dokumentation einer Methode vermerkt? Oder ist es umgekehrt, dass man niemals Thread-Sicherheit annehmen sollte, wenn nicht anders angegeben? Was denkst du?

Bearbeiten:

Nimm eine Klasse an

class InfoClass {
public:
void Init();
int  GetInfo();
void Free();
};

Berufung Init() Einmal, GetInfo() aus einem Thread-Kontext und Free() nachdem die Threadoperationen beendet sind.

Antworten:

4 für die Antwort № 1

Fadensicherheit immer erfordert zusätzliche Arbeit, so dass das einzige, was Sie sicher annehmen können, das Gegenteil ist - in Ermangelung einer direkten Unterstützung ist die Fadensicherheit nicht unterstützt.

Erläuterung:

Angenommen, Sie haben eine getfür ein einfaches 64-Bit long long und laufen auf einer 32-Bit-Architektur. Während der Computer die zweite Hälfte dieses langen 64-Bit-Werts abruft (was gerade mit der ersten Hälfte erledigt wurde), aktualisiert ein anderer Thread die zweite Hälfte.

Bearbeiten (um die Bearbeitung in der Frage zu treffen):

(Randbemerkung - die Art und Weise, wie Sie Ihre Klasse präsentiert haben, macht sie unbrauchbar, da alle Mitglieder privat sind)

Wenn du nicht hast irgendein Zugriffsmethoden, die den Status Ihrer Klasse ändern, nachdem sie erstellt wurde kann Thread-Sicherheit voraussetzen. Aber es ist immer noch eine schlampige Steigung, denn später kann jemand, der Ihre Annahme nicht kennt, eine hinzufügen setin der Klasse und haben eine wunderbare Reise in einem Fehler-Fehler-Debugging-Erlebnis;)


4 für die Antwort № 2

Ich denke, Sie sollten davon ausgehen, dass die Methode ist not thread-safe wenn nicht anders gesagt

Eigentlich sehe ich keinen Grund anzunehmen, dass eine Methode ist thread-safe standardmäßig.


2 für die Antwort № 3

Eine get-Methode könnte Thread-sicher sein, aber auch nicht unbedingt. Wenn es eine Klasse gibt:

class A {
int value;

int getValue() {
return value;
}

void processValue() {
value += 2;
value = value*2;
}
}

In dem obigen Code getValue ist offensichtlich nicht threadsicher, da es aufgerufen werden könnte, wenn sich ein anderer Thread in der zweiten Zeile befindet processValue und damit die Variable value in einem inkonsistenten Zustand sein. Der Getter hier ist also erneut eintritt (wiederum ist dies möglicherweise nicht so), aber immer noch nicht Thread-sicher.

Wie bereits in diesem Thread erwähnt, wird, sofern nicht anders angegeben, davon ausgegangen, dass es nicht threadsicher ist.


0 für die Antwort № 4

Wenn die Variable mit aktualisiert wird set Methode, wenn Sie anrufen get Methode das Ergebnis wird Müll sein. Wenn nichts anderes angegeben ist, kann keine Gewindesicherheit angenommen werden.