

C++ přístup k třídě z více vláken
Zdravím. Mám instanci třídy a v jedné metodě vytvářím nové vlákno. Toto vlákno zavolá jinou metodu z této třídy a pracuje samostatně. Obě vlákna čtou/zapisují do třídních proměnných. Jak druhé vlákno dokončí činnost, spojí se s prvním vláknem, které ho vytvořilo pomocí join(). Obě vlákna přistupují k alokovanému poli int, jeho pointer je třídní proměnná. Obě vlákna mají ještě svůj pointer na toto pole, na začátku jsou oba inicializovány na začátek pole a tyto pointery jsou rovněž ve třídě. Protože je jedno vlákno pomalejší, než druhé, využívá se jednoduché synchronizace. První vlákno postupně vkládá hodnoty do pole, druhé je odebírá. Porovnávají se pointery ve smyčce while a dokud je pointer pro čtení větší nebo roven pointeru pro zápis, tak to tam cyklí. Problém je, že to z té smyčky nevyskočí nikdy. Logicky by mělo. První vlákno vkládá hodnoty a zvyšuje pointer pro zápis. V určitém okamžiku bude hodnota pointeru pro zápis větší, než hodnota pointeru pro čtení a smyčka by se měla ukončit. Pointery jsem zkusil dát i úplně globální mimo třídu, ale stejný problém. Jako by se změna pointeru v druhém vlákně vůbec neprojevila v prvním. Do pole jde jinak zapisovat i číst z obou vláken. Pokud ty čekací cykly zakomentuju tak to funguje, ale nekorektně, protože chybí ta synchronizace.
P.S. žádné semafory ani kritické sekce tam nepoužívám, protože operace s integery jsou atomické, takže výlučný přístup není potřeba (rada MM..)
Díky za případnou radu.