Statische Variablen und Threads (C)

Ich weiß, dass das Deklarieren einer statischen Variablen innerhalb einer Funktion in C bedeutet, dass diese Variable ihren Zustand zwischen Funktionsaufrufen beibehält. Im Kontext von Threads hat dies zur Folge, dass die Variable ihren Status über mehrere Threads beibehält oder einen separaten Status hatzwischen jedem Thread?

Hier ist eine Prüfungsfrage aus der Vergangenheit, die ich nur schwer beantworten kann:

Die folgende C-Funktion soll verwendet werden, um seinen Aufrufern eindeutige Bezeichner (UIDs) zuzuweisen:

get_uid() 
{
static int i = 0;
return i++;
}

Erklären Sie, wie get_uid () in einer Umgebung, in der es von mehreren Threads aufgerufen wird, möglicherweise fehlerhaft funktioniert. Geben Sie anhand eines bestimmten Beispielszenarios genau an, warum und wie ein solches falsches Verhalten auftreten kann.

Im Moment gehe ich davon aus, dass jeder Thread einen eigenen Status für die Variable hat, aber ich bin nicht sicher, ob das richtig ist oder ob die Antwort mehr mit dem Fehlen eines gegenseitigen Ausschlusses zu tun hat. Wenn dies der Fall ist, wie könnten in diesem Beispiel Semaphoren implementiert werden?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage