Mijn situatie lijkt me vrij veel voorkomend, maar in de wirwar van info over volatile in C++ en het al dan niet (meer niet dan wel) gebruiken ervan om te syncen kan ik toch geen duidelijk antwoord vinden. Kort samengevat:
Een thread produceert gegevens, op een bepaald ogenblik zijn deze gegevens klaar. Hierna veranderen de gegevens niet meer, en mogen ze door verschillende threads gelezen worden.
Dus:
* gegevens onbestaand of work in progress: geen read access
* gegevens af: lezen maar, geen synchronisatie nodig, er verandert toch niets meer
Het eenvoudigste lijkt me dus om een volatile variable flag te voorzien die wordt aangepast als de gegevens klaar zijn. In code (in de praktijk members, geen lokale vars):
Is dit correct? Ik zou het natuurlijk kunnen testen, maar ik wil eerder weten of het altijd gaat werken, maw of het volgens de standaard en qua idee juist is.
Een thread produceert gegevens, op een bepaald ogenblik zijn deze gegevens klaar. Hierna veranderen de gegevens niet meer, en mogen ze door verschillende threads gelezen worden.
Dus:
* gegevens onbestaand of work in progress: geen read access
* gegevens af: lezen maar, geen synchronisatie nodig, er verandert toch niets meer
Het eenvoudigste lijkt me dus om een volatile variable flag te voorzien die wordt aangepast als de gegevens klaar zijn. In code (in de praktijk members, geen lokale vars):
C++:
1
2
3
4
5
6
7
| volatile bool flag = false; std::vector<std::string> data; data.reserve(1000); for(int i = 0; i != 1000; ++i){ data.push_back("boeiend"); } flag = true; |
Is dit correct? Ik zou het natuurlijk kunnen testen, maar ik wil eerder weten of het altijd gaat werken, maw of het volgens de standaard en qua idee juist is.