SHARE
TWEET

Untitled

a guest Mar 20th, 2017 57 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Если ваш класс не похож на то, что написано ниже, то у вас проблемы
  2.  
  3. // именуйте классы с помощью CamelCase
  4. class TicketLock {
  5. // сначала описывайте публичные методы, именно они образуют интерфейс вашего класса
  6. // в первую очередь читателю важно знать, что делает ваш класс, в последнюю -- какие у него поля
  7. public:
  8.   // два отступа!
  9.   TicketLock()
  10.     : next_free_ticket(0)
  11.     , owner_ticket_(0) {
  12.   }
  13.  
  14.   // для именования методов используйте CamelCase
  15.   void Lock() {
  16.     // используйте const всегда, когда значение не будет меняться, в аргументах и локальных переменных
  17.     const bool this_thread_ticket = next_free_ticket_.fetch_add(1);
  18.    
  19.     // используйте пустые строки, чтобы отделить логические секции друг от друга
  20.     // после while и if ставьте пробел
  21.     while (this_thread_ticket != owner_ticket_.load()) {
  22.         std::this_thread::yield();
  23.     }
  24.   }
  25.  
  26.   // отделяйте методы пустыми строками, это облегчает навигацию читателю
  27.   void Unlock() { // открывающая скобка на строке с именем функции, отделена пробелом
  28.       // между операторами и операндами ставьте пробелы: a + b
  29.       owner_ticket_.store(owner_ticket_.load() + 1);
  30.   }
  31.  
  32. // разделяйте пустыми строками секции в объявлении класса
  33. // поля класса должны быть в отдельной секции, все поля должны быть private
  34. private:
  35.   // используйте осмысленные имена полей, не сокращая слова
  36.   // в именах используется snake_case, имена полей заканчиваются на _
  37.   std::atomic<std::size_t> next_free_ticket_;
  38.   // для хранения счетчиков используйте тип size_t
  39.   // не зашивайте тип в имя переменной
  40.   std::atomic<std::size_t> owner_ticket_;
  41. };
RAW Paste Data
Top