Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++ - Przerobienie programu

18 Cze 2015 13:07 690 6
  • Poziom 2  
    Dzień dobry,
    Zwracam się z prośbą odnośnie przerobienia programu który prześle na wielowątkowy, mianowicie ma czytać z 2 plików liczby, zapisywać je do wektorów, a następnie odpowiadające sobie z każdych z plików liczby dodawać i umieszczać w 3 pliku wynikowym. Program aktualnie działa, ale potrzebuje by był wielowątkowy. Tzn już po zapisie do wektorów liczb z 2 plików, ma dodawać i zapisywać równolegle do 3 pliku. Etap czytania i zapisu do wektorów może zostać jak jest, chyba, że wymaga to zmian. Wątków może być np. 3,4 nie ma to znaczenia. Każdy wątek ma daną część dodawać i zapisywać. Z góry bardzo dziękuję za pomoc.

    Dodam, że program ma być jak najprostszy, tylko żeby działał :)
  • Poziom 32  
    1. Jeżeli potrzebujesz zrobić aby to działało szybko to wywal całe to badziewie rozciągnięte na 64 wiersze (OMG) i zamień na:
    Kod: c
    Zaloguj się, aby zobaczyć kod
    bo szybciej i tak nie zapiszesz. Gdyby pliki były binarne ...
    2. Dopóki masz jeden plik w projekcie - Dev nie wymaga tworzenia projektu
    3. Zapoznaj się z pojęciem formatowania kodu.
  • Poziom 16  
    autor pisząc "program ma być jak najprostszy, tylko żeby działał" zapomniał chyba dodać "i wykorzystywał wątki i wektory".
    @psiak to wygląda raczej na jakieś ćwiczenie, niż żeby miało robić coś konkretnego.
  • Poziom 32  
    @mxmxmxmxmx:
    - jeżeli uważasz że to jakieś zadanie to zgłoś wątek do moderatora - bo niezgodne z regulaminem.
    - skąd wniosek że projekt musi wykorzystywać wektory?
  • Poziom 16  
    -psiak- napisał:
    - skąd wniosek że projekt musi wykorzystywać wektory?


    armando1994 napisał:
    ...ma czytać z 2 plików liczby, zapisywać je do wektorów...
  • Poziom 2  
    Program na wykorzysywać i wektory i wielowątkowość.

    Moderowany przez arnoldziq:

    3.1.17. Zabronione jest publikowanie wpisów obniżających ogólny poziom dyskusji, wynikających z lenistwa lub zawierających roszczeniowy charakter wypowiedzi.

  • Poziom 15  
    armando1994: Do tworzenia wątków możesz użyć np. std::async lub std::thread. std::async możesz podać po prostu funkcję, którą ma wykonać w osobnym wątku (z samotną flagą std::launch::async).

    Pisanie po pliku z kilku wątków ma w zasadzie jedynie sens, jeśli zapisujesz liczby binarnie (tj. każdy wątek wie, w którym miejscu ma zapisywać i tam np. wpisze swoje 4 czy tam 8 bajtów). Musiałbyś zduplikować uchwyt pliku dla każdego z wątków, żeby każdy pisał używając swojego i miał swój osobny wskaźnik pozycji w pliku.

    Jeśli to ma być zapis tekstowy, to każdy wątek musiałby używać jakiejś blokady (muteksa) żeby zabronić innym wątkom pisanie w tym samym czasie. Również nie wolno pisać po żadnych strukturach (np. wektorach) bez zablokowania innym wątkom dostępu do nich na czas zapisu. Do tego przyda Ci się std::lock_guard, który zakładasz na wcześniej stworzonym muteksie. W sumie mógłbyś potrzebować kilku muteksów: jeden do pierwszego wektora, drugi do drugiego, trzeci do pliku. Jeśli byś potrzebował zablokować dwa lub więcej muteksów jednocześnie, to pamiętaj, żeby zawsze je blokować w tej samej kolejności, inaczej będziesz miał dead-lock. Możesz użyć funkcji std::lock, która automatycznie zawsze blokuje muteksy w tej samej kolejności, niezależnie od kolejności podania ich jako argumentów.

    Musisz też zdecydować w jaki sposób wątki podzielą się liczbami do zsumowania. Może utworzysz dwa wątki: jeden weźmie nieparzyste, a drugi parzyste?