singly-linked-list
-
hola
kann mir einer erklaeren wie das mit singly-linked-lists funktioniert ? in dem SDK steht es im bereich synchronisation drinnen. was kann ich damit machen ?
ist das so was aehnliches wie ein FILO-kontainer?Meep Meep
-
meinste das?
--> http://msdn2.microsoft.com/En-US/library/aa489548.aspx
-
jo genau diese meinte ich. aber ich werde aus dieser seite nicht so recht schlau.
ich brauch naemlich einen kontainer der nach dem FIFO prinzip arbeitet und mit dem mehrere prozesse arbeiten koennen. wird so was aehnliches wie die MessageQueue.
hab mir derzeit eine list aehnlich std::list gebastelt, welche ein MemoryMappedFile fuer die prozesse verwendet und mittels mutexes (is das die mehrzahl von mutex?) die synchronisation macht.
jetzt dachte ich das ich dafuer die singly-linkes-list missbrauchen koennte.Meep Meep
-
Für eine FIFO-Struktur benötigst du Zeiger auf den Kopf der Liste (dort werden die jeweils ältesten Elemente rausgenommen) und das letzte Element (dort hängst du neue Elemente an).
-
danke, damit waere eine frage scho mal positiv beantwortet.
und wie sieht das dann mit der synchronisation aus (bei mehreren prozessen) ? ist die singly-linked-list schon von haus aus synchronisiert oder brauche ich dafuer noch ein anderes synchronisationsobjekt ?Meep Meep
-
The system also provides atomic versions of the list operations, ExInterlockedPopEntryList and ExInterlockedPushEntryList. Each takes an additional spin lock parameter. The routine acquires the spin lock before updating the list and then releases the spin lock after the operation is completed. Each operation on the list must use the same spin lock to ensure that each such operation on the list is synchronized with every other. You must use the spin lock only be with the ExInterlockedXxxList routines. Do not use the spin lock for any other purpose. Drivers can use the same lock for multiple lists, but this behavior increases lock contention so drivers should avoid it.
Die Listen können synchronisiert werden, aber um das zugehörige Sync-Objekt (der oben erwähnte "spin lock") mußt du dich selber kümmern.
-
die spin locks (KSPIN_LOCK) gibt's nur im kernel.
wenn du sowas im user mode brauchst, kannste z.b. was mit den push/pop macros für SINGLE_LIST_ENTRY und einem mutex selber basteln...
