Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Если ваш класс не похож на то, что написано ниже, то у вас проблемы
- // именуйте классы с помощью CamelCase
- class TicketLock {
- // сначала описывайте публичные методы, именно они образуют интерфейс вашего класса
- // в первую очередь читателю важно знать, что делает ваш класс, в последнюю -- какие у него поля
- public:
- // два отступа!
- TicketLock()
- : next_free_ticket(0)
- , owner_ticket_(0) {
- }
- // для именования методов используйте CamelCase
- void Lock() {
- // используйте const всегда, когда значение не будет меняться, в аргументах и локальных переменных
- const bool this_thread_ticket = next_free_ticket_.fetch_add(1);
- // используйте пустые строки, чтобы отделить логические секции друг от друга
- // после while и if ставьте пробел
- while (this_thread_ticket != owner_ticket_.load()) {
- std::this_thread::yield();
- }
- }
- // отделяйте методы пустыми строками, это облегчает навигацию читателю
- void Unlock() { // открывающая скобка на строке с именем функции, отделена пробелом
- // между операторами и операндами ставьте пробелы: a + b
- owner_ticket_.store(owner_ticket_.load() + 1);
- }
- // разделяйте пустыми строками секции в объявлении класса
- // поля класса должны быть в отдельной секции, все поля должны быть private
- private:
- // используйте осмысленные имена полей, не сокращая слова
- // в именах используется snake_case, имена полей заканчиваются на _
- std::atomic<std::size_t> next_free_ticket_;
- // для хранения счетчиков используйте тип size_t
- // не зашивайте тип в имя переменной
- std::atomic<std::size_t> owner_ticket_;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement