Podział dużego pliku tekstowego
Ostatnio zmodyfikowano 2015-05-10 18:17
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. |
|
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). |
|
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 :-) |
|
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. |
|
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. |
|
pekfos |
» 2015-05-10 18:17:20 Jeszcze trochę pokombinujesz i dojdziesz do już podanego rozwiązania. |
|
1 « 2 » |