Operacje na wątkach thread

0

Witam

Dziś mam kolejne pytanie.

Korzystam z

 #include <thread> 

tworzę sobie funkcje

void watek(int a)
{
while(1)
   {
       cout<<a;
   }
}

następnie wywołuję ją:

thread first(watek, 20);

w między czasie w programie zaczynam sobie coś robić ...

znalazłem coś takiego jak sleep_for, pytanie jak odnieść to do konkretnego wątka?

0

Co chcesz zrobić i w jakim celu?

0

Chodzi o to że mam w tle funkcję, która kopiuje pliki i robi to strumieniem po kawałku, od czasu do czasu chcę otworzyć, któryś z plików wówczas muszę przerwać jej działanie. Kopiowanie jest w wątku a wszelkie inne operacje w klasycznym liniowym main().

0

Najprościej byłoby upewnić się, że wątek skończył już pracę, czyli wywołać join na obiekcie skorelowanym z Twoim wątkiem kopiującym.

Takie czekanie jest mało optymalne przy kopiowaniu dużej ilości plików, dlatego koszerniej byłoby przed rozpoczęciem pracy zrobić listę plików i skorelować każdy z jakimś semaforem. Wątek kopiujący ustawiłby odpowiednio semafor skojarzony z konkretnym plikiem dając znać wątkowi głównemu, że plik jest kopiowany, wtedy wątek główny musi poczekać na koniec kopiowania bądź zająć się czymś innym. Wątek główny przy otwieraniu pliku również ustawiłby odpowiednio semafor, żeby wątek kopiujący pominął skojarzony z nim plik i wrócił do niego później.

0

Dzięki bardzo, nie rozwiązałem tego klasycznym semaforem ale po przestudiowaniu opcji wątków doszedłem do wniosku, że rozwiązanie z bool-em (jako semaforem) będzie najlepsze. Kopiuje plik trzymam flagę, kończę zdejmuję flagę i inne elementy mogą się do niego dobierać.

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