Dzielenie zmiennej pomiędzy wątkami

0

Cześć,

Mając dwa wątki chciałbym dzielić między nimi zmienną. Jeden wątek pracuje non stop i odlicza mi czas, zapisuje ten czas który upłynął do zmiennej globalnej. Drugi odczytuje tą samą zmienną. (np. w main)
Czy zwykły int w tym przypadku się nadaje? Ewentualnie blokowanie przy zapisie / odczycie zmiennej mutexami aby oba nie miały dostępu do niej w tym samym momencie?

0

musisz zablokowac (lock) taka zmienna, mutex wystarczy. Zmienna moze byc kazdego typu, jezeli taki przyklad jest taki prosty

http://en.cppreference.com/w/cpp/thread/mutex

0

Odczyt i zapis do zmiennej int powinien być atomowy więc na pewno potrzebna jest blokada?

Do tego trzeba jeszcze oznaczyć zmienną jako volatile żeby zablokować możliwość jej cacheowania.

0

jeżeli jeden wątek tylko odczytuje a drugi zapisuje to nie ma potrzeby lockowania

2
krzysiek050 napisał(a):

Odczyt i zapis do zmiennej int powinien być atomowy więc na pewno potrzebna jest blokada?

Standard nie zapewnia atomowości przy dostępie do typu int więc lepiej wykorzystać operacje atomowe. Jest to wystarczające rozwiązanie w przypadku dostępu do typów prostych i nie wymaga żadnych locków: http://en.cppreference.com/w/cpp/atomic/atomic.

0

Dzięki za odpowiedzi.

Jeżeli mam np coś takiego jak poniżej, gdzie zmienna która powinna być chroniona przed jednoczesnym dostępem, jest wykorzystywana w bloku if.
to lepiej chyba użyć atomic niż mutexa czy mam rację? W tym momencie mam to zrobione tak:

std::mutex mutex;

while (true) {

    std::unique_lock<std::mutex> lock_var(mutex);

    if (variable) {
        
        //tutaj jakieś operacje, wywoływanie funkcji
        
        variable = false;
    }
    lock_var.unlock();
}

Niech modek poprawi i skasuje ten post.

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