Я должен реализовать класс в Visual C++ с очередью; в этой очереди я должен выполнять атомарную работу. Поиск в Интернете я нашел класс std :: atomic, но у меня есть некоторые вопросы. Первый: в чем разница между:Атомная операция в очереди <T>?
A) atomic <queue <T>> fifo;
B) queue <atomic <T>> fifo;
?
Второй вопрос: как я могу сделать атомную операцию, например push?
push (T.load)
- правильное решение?
Последний вопрос: если я защищу некоторую операцию в очереди с помощью мьютекса, все-таки мне нужно выполнить атомную операцию на нем?
Любые советов ценятся, Привет
Какой атомизации вам нужен именно? Что должно быть атомом? –
Спасибо за комментарий. Спецификация моей домашней работы только говорит «атомная», я полагаю, что я должен использовать методы, предлагаемые классом std :: atomic. –
Написание правильной атомной очереди очень сложно. Эксперты мирового класса терпят неудачу. Вы знаете, есть ли у вас один производитель - единственный потребитель? Одиночный производитель - несколько потребителей? Несколько производителей - один потребитель? Несколько производителей - несколько потребителей? Это разные случаи с различными требованиями. – nwp