List<> durch mhere Thread mit IEnumarator iterieren ?



  • Hi, (fragen über fragen;) )

    Gibt es probleme wenn ich objekte mhere threads habe welche jeweil einen Enumarator auf die selbe Liste haben und parallel iterieren ??? Sie müssen auch variablen ListObjecte ändern.. !! Denke schon.. wie wäre ne schöne lösung?

    die List ist fix.. d.h. die Thread fügen keine elemente hinzu oder löschen sie.. sie ändern nur members der entsprechenden objekte



  • In der MSDN werden i.A. recht genaue Angaben über die Threadsicherheit der Framework-Klassen gemacht.



  • BorisDieKlinge schrieb:

    .. sie ändern nur members der entsprechenden objekte

    Deshalb ist das keine Frage ob die Enumeratoren threadsafe sind, sondern wie du die Zugriffe auf dein Listenobjekt gestaltet hast. Die müssen nämlich threadsafe sein.



  • ahh verstehe^^ sowas in der art?

    class Element{
    
      private object lockvar="";
    
      .....
    
      public void Manipulate(...){
    
        lock(lockvar){
    
         //  element menbers verändern`??
        }
      }
    }
    


  • OK, bin jetzt gerade nicht sicher, was passiert, wenn du ausgerechnet den leeren String nimst. Der sollte ja "geinternt" werden. Könnte also sein, das du dir damit einen recht globalen Lock baust.

    object lockvar=new object();
    

    oder aber zur Not

    lock(this)
    

    verwenden.



  • lock(this) ist eine ganz blöde Idee. Das eigene Objekt könnte von irgend jemand anderen zum Locken verwendet werden.

    Einfach

    object lockhelper = new object();
    
    lock(lockhelper)
    {}
    


  • thanks a lot;) das

    object objectvar ="";
    

    hab ich hier gesehen:

    http://www.devtrain.de/news.aspx?artnr=790



  • "" wurde scheinbar in 1.0 und 1.1 geinterned, ab 2.0 nicht mehr und ab 3.5SP1 wieder.


Log in to reply