Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Podział dużego pliku tekstowego

Ostatnio zmodyfikowano 2015-05-10 18:17
Autor Wiadomość
pekfos
» 2015-05-10 15:47:37
ale mój mały mózg nie może pojąć co mi to da do końca.
Następny odczyt z tej pozycji przeczyta całą następną linię, a odczyt poprzedniej zakończy się w tym miejscu. Masz stan początkowy jednego wątku i warunek zakończenia dla drugiego.
P-132032
Fireho
» 2015-05-10 15:53:02
Lepiej zrobić to inaczej:
- tworzysz sobie
std::ifstream
 wspólny dla obu wątków. Nie liczysz znaków, nie ustawiasz w połowie - po prostu otwierasz plik.
- startujesz wątki
- 1 wątek bierze 1 linijkę(albo i więcej), przez co odczytywać teraz będziesz od 2 linijki
- drugi czyta drugą linijkę
- jak pierwszy skończy pracę, to bierze kolejną(3)
- jak drugi skończy obrabiać drugą, to bierze czwartą
I tak na zmianę. Oczywiście trzeba tutaj dodać zabezpieczenie przed jednoczesnym odczytem, można też pobierać po więcej linijek(np. 10).
P-132035
wiktor12348
Temat założony przez niniejszego użytkownika
» 2015-05-10 15:53:55
Ale dobrze rozumiem, mając 10 wątków, będę musiał czekać na skończenie odczytu poprzedniego by ten następny mógł odczytać plik.

@Fireho: Czyli odczyt X*N lini, gdzie N to nr wątka a X nr pętli :-)
P-132037
pekfos
» 2015-05-10 16:00:33
Fireho: Synchronizacja cię zje. W praktyce tylko jeden wątek naraz będzie coś robić. Szybciej zrobić to na jednej pętli.
P-132039
Fireho
» 2015-05-10 16:43:27
@pekfos Fakt, w sumie mogłoby być więcej tych uchwytów do pliku. Wtedy po prostu trzeba by zrobić jakiś licznik "na której linii jesteśmy" i tylko przy tym liczniku musiałaby być obecna synchronizacja, a każdy wątek miałby swój własny uchwyt do pliku. No i ofc. nie pobierać po jednej linii - bardziej tysiąc, kilka tysięcy.
P-132045
pekfos
» 2015-05-10 18:17:20
Jeszcze trochę pokombinujesz i dojdziesz do już podanego rozwiązania.
P-132050
1 « 2 »
Poprzednia strona Strona 2 z 2