Erzwingt das Eindringen in den gleichen Thread

8

Gibt es eine Möglichkeit, sicherzustellen, dass eine Goro-Routine nur in einem bestimmten Betriebssystem-Thread ausgeführt wird? Zum Beispiel, wenn GUI-Operationen im GUI-Thread ausgeführt werden müssen, aber mehrere GUIoutinen mit GUI-Code vorhanden sein können.

GOMAXPROCS(1) erledigt die Aufgabe technisch, aber das vereitelt den Zweck des Multithreading.

LockOSThread() funktioniert auch, aber das verhindert auch, dass eine andere Goroutine in diesem Thread läuft.

Gibt es eine Möglichkeit, dies zu tun, oder muss alles, was denselben Thread benötigt, auch in der gleichen Routine laufen?

    
György Andrasek 10.12.2009, 11:05
quelle

2 Antworten

8

Soweit ich weiß, derzeit nicht. Ich denke, der "go-like" Weg, dies zu tun, würde darin bestehen, eine Goroutine zu schreiben, die in den GUI-Thread- und Dienst-Anfragen von anderen über einen Kanal eingesendeten Goroutinen läuft. Sie könnten es beispielsweise von einem Kanal lesen lassen, der Funktionszeiger akzeptiert, und diese Funktionen ausführen.

    
Nick Johnson 10.12.2009 12:19
quelle
3

Warum willst du das machen? Ich glaube runtime.LockOSThread() ist notwendig, wenn Sie eine Bibliotheksbindung aus C-Code erstellen, die thread-lokalen Speicher verwendet. Ansonsten lass einfach den Scheduler die Goroutines für dich multiplexen.

Und beachte, dass runtime.LockOSThread() nur verhindert, dass andere goroutines in diesem Thread laufen, bis du runtime.UnlockOSThread() aufgerufen hast.

    
Hai-Anh Trinh 18.12.2009 14:47
quelle

Tags und Links