Jak wykonać zadania zwielowątkowością, semaforami i mutexami?

0
  • Liczba wątków powinna być określona przez #define NUM_THREADS liczba
  • Wersja programu z wykorzystaniem mutexu i semafora

Napisać program, w którym każdy wątek generuje dwie liczby losowe. Następnie wątek główny
oblicza sumy wygenerowane przez poszczególne wątki i przekazuje informację do wątków czy
dany wątek wygrał czy przegrał. Na końcu każdy wątek wypisuje komunikat wygrałem lub
przegrałem.

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>

#define liczba_watkow 5

pthread_mutex_t blokada = PTHREAD_MUTEX_INITIALIZER; // inicjalizacja i deklaracja mutexa

void* watek(void* arg) {
    int id = *(int*)arg;
    
    int liczba1 = rand() % 100;
    int liczba2 = rand() % 100;

    pthread_mutex_lock(&blokada); // Zablokuj blokada


    pthread_mutex_unlock(&blokada); // Odblokuj blokada

}

int main()
{
    srand(time(NULL));

    pthread_t threads[liczba_watkow];
    int thread_ids[liczba_watkow];

    // Tworzenie wątków
    for (int i = 0; i < liczba_watkow; ++i)
    {
        thread_ids[i] = i;
        pthread_create(&threads[i], NULL, watek, (void*)&thread_ids[i]);
    }

    // Sprawdzanie sum wygenerowanych przez wątki

    
    // Oczekiwanie na zakończenie wątków
    for (int i = 0; i < liczba_watkow; ++i)
    {
        pthread_join(threads[i], NULL);
    }

    return 0;
}

Czy możecie mi pomóc z dokończeniem tego zadania? Nie rozumiem jak można zliczyć sumę w wątku głównym ( funkcji main() ) a następnie przekazać ją znowu do wątku

0

do ogłoszeń z tym
nawet nie zaznaczyłeś dla chętnych że chodzi o wykorzystanie pthreads

0

Nie zaleca się używać makra do inicjalizacji mutexa bo nie da się sprawdzić błędu.

Szczerze to jestem pijany i nie będę się rozpisywał.

Butenhof programming with posix threads. W 4 dni z tą Książka w ręku sobie poradzisz.
Książka jest na chomiku


Pisz nazwy zmiennych po angielsku

0
  1. Stwórz sobie strukturę, w której będą 3 liczby: dwie wylosowane przez wątki i trzecia z wynikiem.

  2. Stwórz dwie instancje takiej struktury - każda dla jednego wątku.

  3. Wrzuć je jako argument do wywoływanych wątków (wskaźnik do nich).

  4. W wątkach wylosuj liczby i czekaj na wynik. (np. yield w pętli dopóki nie ma wyniku - do celów edukacyjnych wystarczy)

  5. W głównym wątku policz sumy i ustal zwycięzcę, następnie wypełnij wyniki dla obu wątków.

  6. Wątki po otrzymaniu wyniku, wypisują na ekran, to co mają do wypisania i kończą pracę.

    Nie potrzebujesz:

  • mutexów
  • wrzucać thread id do wątków

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