Autor Beitrag
ironhaert
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mo 03.05.10 15:14 
Hallo,
ich hätte eine Frage bezüglich Threadsicherheit im Allgemeinen, bezügliche .NET 4.0 und auch speziell im Dictonary.

zunächst zum Dictonary:
--------------------------
In der MSDN-Library fand sich folgendes zu Threadsicherheit für das generische Dictronary<T1,T2>:
Zitat:
Öffentliche statische (Shared in Visual Basic) Member dieses Typs sind threadsicher.Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.


Also irgendwie habe ich es nicht so richtig verstanden, wie das mit dem statischen Member gemeint ist oder ich kann mir einfach den Grund für die threadsicherheit nicht vorstellen.

Ich habe folgendes Member statisch in einem Singelton:
ausblenden C#-Quelltext
1:
2:
private static Dictionary<string, BlockingQueue<Something>> mDicBlockedQeueues
            = mQueueBlockedSomething = new Dictionary<string, BlockingQueue<Something>>();

Dies heist für mich nun, dass die Threadsicherheit für mDicBlockedQueues gewährleistet ist oder?
Wieso, wenn ich fragen darf? ...,weil es kann doch nun immernoch sein, dass auf dieser KLasse mehrere Threads unterwegs sind und diese nach belieben das Dictonary füllen leeren und in der Zwischenzeit anderere Threads Anzahl abfragen und so weiter. Für mich nicht threadsicher. Oder ist hier eine Besonderheit, die ich außer Acht gelassen habe?

Allgemein:
----------
Diesen Eintrag in der MSDN-Lib habe ich schon mehrmals bei anderen KLassen gefunden und hier liegt dann wohl, je nach Verwendung, die Threadsicherheit in der Verantwortung des Programierers. Gibt es eine Übersicht besonders erwähnenswerteter Klassen, welche sehr behilflich sind für Threadsicherheit? vielleicht auch im Bezug auf die verschiedenen .Net-versionen?

.Net 4.0:
--------------
Ich hatte bereits mal gelesen, dass in .NET 4.0 einige Erweiterungen zum Thema THreading hinzugefügt wurden und viel Arbeit abgenommen wurde. Habt ihr vieleicht irgendwelche tollen seiten die einem 3.5 u. 4.0 gegenüberstellen oder generell die Vorteile und Neuerungen im Bezug auf Threading in 4.0 aufzeigen?

Viele Grüße,
ironhaert
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 03.05.10 17:36 
Zitat:
Dies heist für mich nun, dass die Threadsicherheit für mDicBlockedQueues gewährleistet ist oder?

Nein. Es geht wie im MSDN Zitat beschrieben um statische Member die der Typ Dictionary selbst hat. Nicht um statische Member auf den Typ Dictionary. Wenn Dictionary einen statischen Member hätte, wobei mir keine relevanter einfällt, dann wäre dieser threadsicher. Das Zitat ist rein theoretischer Natur. Statische Member gelten als threadsicher da sie ja keinen Zugriff auf Instanzdaten haben. Wenn ich keinen Zugriff auf Daten habe gibts auch keine Chance einen Konflikt auszulösen wenn mehrere Threads auf die gleichen Daten zugreifen.

Zitat:
Gibt es eine Übersicht besonders erwähnenswerteter Klassen, welche sehr behilflich sind für Threadsicherheit?

Hier geht es immer insbesondere um Thread Synchronisierung. Vergleich der verschiedenen Möglichkeiten z.b. hier.

Zitat:
Ich hatte bereits mal gelesen, dass in .NET 4.0 einige Erweiterungen zum Thema THreading hinzugefügt wurden


Du meinst wahrscheinlich die Task Parallel Library. Mir ist nicht bewusst das es dort Neuerungen bezüglich Threadsicherheit/Threadsynchronisierung gibt. Was nicht heißt das es da keine gibt.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 03.05.10 19:00 
Doch es gibt neue Concurrent-Klassen, s. msdn.microsoft.com/d...ibrary/dd460718.aspx

d.h. im konkreten Fall also ConcurrentDictionary<K, V>.

Hallo ironhaert (oder eher ironheart -),
generell kannst du unter "Neues im .NET Framework 4" msdn.microsoft.com/d...8%28v=VS.100%29.aspx alles Wissenswerte erfahren.
Und für Threading insbesondere die schon erwähnte "Task Parallel Library" (TPL):
msdn.microsoft.com/d...3%28v=VS.100%29.aspx
bzw. konkreter
msdn.microsoft.com/d...60717(v=VS.100).aspx

Edit: ich habe mal einen PowerPoint-Vortrag angehängt, den ich letzte Woche vorgetragen habe
(der die wichtigsten Änderungen vom .NET 4 und insbesondere TPL und PLINQ erklärt).
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von Th69 am Di 16.09.14 15:26, insgesamt 1-mal bearbeitet
ironhaert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Di 04.05.10 09:10 
Vielen Dank für eure Antworten, die Infos und die tollen Links.

Vieleicht sollte ich doch weniger(oder sinnvoller) googlen und vorher nochmals intensiver in der MSDN-Library suchen.(Da hier ja alle euere Verweise dahin führen, also sry an dieser Stelle für die unzureichende Recherche).
Nur konnte ich mich bisher noch net so arg mir der Lib anfreunden. Aber je mehr ich darin lese, desto besser find ich die Lib.

@Ralf Jansen
Dake nochmals für die Erklärung. Irgendwie hatte ich das mit "Member dieses Typs" nicht so richtig verstanden. Ich dachte überhaupt nicht and statische Member der Klasse Dictonary selbst sonder als Verwendung derer als statisches Member. Naja und da man hier ja wiederum Instanzen bilden tut, hatte es mich irgendwie verwirrt.
Achja und: ironhaert ist schon so gewollt ;-) ...

@Th96
Danke für dein PPT-Vortrag, werd mir das ganze demnächst mal gemütlich anschauen.

gruß ironhaert