Моя проблема в том, что я не знаю, как правильно использовать мьютекс.Я понимаю, как это работает теоретически, но я не знаю, почему это не работает в моем коде. Я подумал, что если я использую мьютекс в var, он будет заблокирован, пока не будет разблокирован.Тем не менее кажется, что у меня все еще есть гонка данных.
Я попытался определить мьютекс класса и мьютекс в основном, который я передаю по ссылке.Каким-то образом ничего из этого не работает.
class test {
public:
void dosmth(std::mutex &a);
int getT(){return t;};
private:
int t = 0;
};
void test::dosmth(std::mutex &a) {
for(;;){
a.lock();
t++;
if(t==1000){
t=0;
}
a.unlock();
}
}
int main() {
test te;
std::mutex help;
std::thread t(&test::dosmth, std::addressof(te), std::ref(help));
for(;;){
for (int i = 0; i <te.getT() ; ++i) {
std::cout<<te.getT()<<std::endl;
}
}
}
В результате я должен получить какой-то вывод, чтобы теперь он работал.