Builder i wielowątkowość

0

Cześć,
Mam pytanie, czy istnieją w Builderze listy/tablice z których może czytać równocześnie wiele wątków. Nie chodzi mi o listy które używają semaforów i blokują się w momencie czytania, potrzebuję listy z której jednocześnie może czytać wiele wątków.
Mój problem polega na tym, że piszę w Builderze WebService. Funkcje tego WebService czytają ze wspólnej pamięci (właśnie listy), która jest modyfikowana przez całkiem osobny wątek. Aby uzyskać najlepszą wydajność muszę znaleźć jakieś rozwiązanie umożliwiające czytanie/pisanie do tej pamięci przez wiele wątków równocześnie.
Co proponujecie?

0

z każdej listy/tablicy/zmiennej możesz czytać/pisać z wątków. Pytanie tylko czy wątek zapisujący nie powinien blokować danego czegoś na czas aktualizacji danych :>
BTW powinno być coś takiego jak TTHreadList ( w Delphi jest :) )

0

jak w Delphi jest to i w Builder, ale to jest raczej lista wątków, a nie lista do której mogą bezpiecznie pisać wątki.

@topic: poszukaj czegoś w stylu TExclusiveWriteMultipleRead (raczej przekręciłem nazwę bo VCL nie używałem już dobrych parę lat). To jest coś co pozwala wielu wątkom odczytywać dane, ale jeśli chodź jeden zadeklaruje, że chce pisać to wszystkie pozostałe zostaną wstrzymane.

0
MarekR22 napisał(a)

jest raczej lista wątków, a nie lista do której mogą bezpiecznie pisać wątki.
sam jesteś lista wątków. Skąd się takie osobniki biorą, co wszystko wiedzą najlepiej?? Chociaż zajrzałeś do helpa/na google aby się cokolwiek dowiedzieć o TThreadList??? To jest gamoniu dokładnie twoje TExclusiveWriteMultipleRead. ŻENADA...

0

Spokojnie nie musisz się jeżyć. Pisałem, że dawno tego nie używałem. Zasugerowałem się nazwą (co się zwykle praktykuje), która sam przyznaj nie jest adekwatna do funkcjonalności (jak by było TThreadSafeList to bym nie popełnił błędu). Moja wina, bo powinienem to wygooglać.
A co do tej klasy, której użycie polecam, to dokładnie nazywa się ona: TMultiReadExclusiveWriteSynchronizer i raczej to jest potrzebne autorowi wątku.

Edit: jeszcze jedno. Autor wątku stosuje raczej listę STL czyli szblon z C++ (wątpię, by Delphi miało taki odpowiednik), więc TThreadList mu zupełnie nie leży.

0

W tej chwili używam zwykłej listy szablonowej c++ i TMultiReadExclusiveWriteSynchronizer. Boję się jednak, że w momencie gdy podłączy się powiedzmy 100 klientów i w najgorszym wypadku 100 wątków będzie żądało dostępu do listy. Po użyciu semafora nie będzie przetwarzania równoległego na liście, tylko kolejny wątek wykona się dopiero gdy poprzedni zwolni zasób, co w praktyce może spowodować długi czas odpowiedzi WebService.

1 użytkowników online, w tym zalogowanych: 0, gości: 1