Prioritäts /Reihenfolges gesteuere Thread sycnronisation?
-
Hallo Ihr,
nehmen wir an , ich meherer Threads, welche auf die gleiche resource
zugrreifen wollen. Der Zugriff auf die Resource ist mit lock(..){...} sycnronisiert.Wenn nun 1. Thread im lock block ist, wird bei allen anderen Threads welche auch dem lock block betreten wollen an der stelle gewartet oder???
Was ist wenn mehrer threads im lock Block warten, und diese Freigeben wird, wer darf dann in den bereich? Wie is das priorisiert? Gibts es da möglichkeiten sowas schöner geregelte sycnrponioseren? mit mutexe ?
Grüße und danke
-
MultiThreader schrieb:
Wenn nun 1. Thread im lock block ist, wird bei allen anderen Threads welche auch dem lock block betreten wollen an der stelle gewartet oder???
Jupp -> Sinn der Sache
MultiThreader schrieb:
Was ist wenn mehrer threads im lock Block warten, und diese Freigeben wird, wer darf dann in den bereich? Wie is das priorisiert? Gibts es da möglichkeiten sowas schöner geregelte sycnrponioseren? mit mutexe ?
Ich würde sagen dass das nach FIFO-Prinzip geregelt ist. In C# ist ja glaube ich das Konzept der Monitore implementiert.. kA was die für Möglichkeiten bieten bzw. ob C# noch mehr hat..
-
Kurz gegoogelt und du findest sogar was zu der Prioritäten Sache:
http://msdn.microsoft.com/de-de/library/system.threading.thread.priority(VS.80).aspx
-
Ok danke,
ich probier gerade bischen rum, und versteh nich wieso das funktioniert!?
object tx=new object(); lock (tx) { lock (tx) { Console.WriteLine("Hallo"); } } Console.WriteLine("Welt");
Des code wird bis "Welt" ausgeführt, aber er msüste doch beim 2ten lock hängen bleiben, da diese ja schon durch das ersten blockiert ist??
-
Nein, da alles im gleichen Thread ausgeführt wird.
-
O.o schrieb:
Nein, da alles im gleichen Thread ausgeführt wird.
s.a. http://www.albahari.com/threading/part2.aspx#_Locking
Abschnitt "Nested locking"