Например, вот так
std::deque<int> dq;
dq.push_back(1);
// thread0
void printElementIfExist() {
if (dq.size() > 0) {
std::cout << dq[0] << std::endl;
}
}
// thread1
void removeElementFromDeque() {
if (dq.size() > 0) {
dq.pop_back();
}
}
условие гонки может позволить получить доступ к dq[0]
, который уже освобожден.
Вернуться к самому вызову size()
. Существуют архитектуры, в которых операция чтения не является атомом c.