lock(...) in verschieden Domains!?
-
Hallo Leute,
geht sowas? funktioniert lock, wenn ich die Referenz der Liste in einer anderen Domaine verwende!? sprich ist lock(list) und lock(_data) das gleiche sync objekt?
class Bar { public Bar(List<...> list) { lock(list) list.Add(...); } } class Foo { List<...> _data; public Bar Create() { return new Bar(_data); } public void Do() { lock(_data) _data.Remove(...); } }
-
Wie meinst du "in einer anderen Domaine", redest du von Appdomains ? Weil dein Beispiel hat damit nicht viel zu tun.
Auf dein Beispiel bezogen, ja, lock(list) und lock(_data) lockt das selbe Objekt. Solange es das selbe Objekt ist, wird lock das auch entsprechend synchronisieren, das sollte auch über AppDomains gehen.
-
@DarkShadow44
Ne, er meint keine AppDomains. Er zeigt in seinem Code ja was er meint.
Davon abgesehen: da AppDomains keine Objekte sharen können, kann es natürlich über AppDomain-Grenzen hinweg NICHT funktionieren.@NullBockException
Es geht um das Objekt. Wenn es das selbe Objekt ist, dann wird auch das selbe Objekt "gelockt". Über welche Referenz man das macht ist dabei völlig wurst.
-
hustbaer schrieb:
@DarkShadow44
Davon abgesehen: da AppDomains keine Objekte sharen können, kann es natürlich über AppDomain-Grenzen hinweg NICHT funktionieren.Das sind zwar speziellere Fälle, aber doch das geht.
Solange es das selbe Objekt ist (d.h. nicht nur eine gleiche Kopie) wird auch das selbe Objekt gelockt.
-
Also das ist mir ganz neu. Wie bitte kann man Objekte zwischen verschiedenen AppDomains sharen?
Beispiel? Link?
-
Mag zwar etwas praxisfern sein, aber man weiß ja nie:
Joe Duffy's Blog - Rude unloads and orphaned locks
-
Hm. Interessant.
Aber ja, das ist total praxisfern, zumindest auf dieses Beispiel bezogen.
Hier geht es schliesslich um eine Generic List, und nicht um eine Type-Instanz.
-
Danke Jungs,
ich wusste nich ob Locks auch noch funktionierenm, wenn ich die regerenz kopiere und nich im gleichen Scope ist!:)
Danke:)
-
Wäre doch ne ziemlich unbrauchbare Sache wenn das nicht ginge, nen?
-
Da haste recht hustbear..
mir war auch nich bewußt, dass dies geht!
lock(_me) { lock(_me) { DoSomething(); } }
also dass verschachtelte locks mit dem gleichen sync-referenz sich nich blocken (was ja auch sinnvoll ist:)