Mam program, który uruchamia dwie różne operacje i chciałbym udostępniać zmienne między nimi.C++, jak udostępniać dane między procesami lub wątkami
W tej chwili używam wątków zamiast procesów fork, ale mam problemy z dzieleniem zmiennych, nawet jeśli zadeklarowałem je jako niestabilne.
Próbowałem z doładowania robi:
boost::thread collisions_thread2(boost::bind(function_thread2);
deklarując wspólne zmienne jako lotny, ale wydaje się, że funkcja function_thread2() nie jest w stanie zobaczyć zmiany na wspólnych zmiennych.
Co chciałbym zrobić coś takiego jak:
thread1:
while(true){
//..do somet stuff
check variable1
}
thread2:
while(true){
do some other stuff
check and write on variable1
}
Możecie polecić mi tutorial lub metodę łatwo podzielić zmienną pomiędzy wątkami? Może być przydatna w tym przypadku biblioteka wspomagania? Czy uważasz, że lepiej jest użyć fork()?
Wiem, że muszę używać muteksa, aby uniknąć sytuacji krytycznych, ale nigdy go nie użyłem.
Sprawdź, czy [to pytanie] (http://stackoverflow.com/questions/118199/c-thread-shared-data) pomaga. I ostatecznie [Boost Thread Synchronization] (http://www.boost.org/doc/libs/1_49_0/doc/html/thread/synchronization.html) – jweyrich
volatile nie ma nic wspólnego z wątkami –
Nawet nie potrzebujesz '. volatile' udostępniać zmienne. Zmienne globalne są domyślnie udostępniane. Jest to jednak coś złego, ponieważ ułatwia tworzenie wyścigów danych. Kiedy masz wyścigi danych, nie możesz oczekiwać, że twój program zachowa się rozsądnie, więc prawdopodobnie masz do czynienia z pewną różnorodnością. Będziesz musiał opublikować więcej swojego prawdziwego kodu, aby uzyskać pomoc w diagnozowaniu wyścigów danych. – bames53