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:)

    😃


Log in to reply