Учитывая логическое б и Потокобезопасная функцию f(), который возвращает логическое значение, является следующее утверждение потокобезопасной:"b &= f();" в потоковом режиме, если "f()" является потокобезопасным?
b &= f();
Идея состоит в несколько потоков выполняются параллельно этим утверждением. Если один из них имеет f, возвращающий false, b должен быть ложным. В противном случае b истинно.
Я думаю, это не атомная, и это может случиться так, что один поток читает б, замораживание, тем временем второй поток чтения б, выполняется F(), применить &, то первый поток просыпаются, работает F() и применить & с использованием старых б.
Гарантировано, что данный поток, сначала запустить f(), а затем читать b, а затем применить &?
Если несколько потоков изменяют 'b', вам необходимо синхронизировать доступ. –
'&' не является особенным. a = что-то (а) всегда великолепен. Здесь что-то (a) => a & f(). – usr