Advertisement
MystMe

Untitled

Feb 19th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.11 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include <vector>
  4.  
  5. namespace tpcc {
  6. namespace solutions {
  7.  
  8. class TournamentTreeLock {
  9.  public:
  10.   explicit TournamentTreeLock(size_t num_threads) {
  11.       num = num_threads;
  12.       levels.assign(num_threads, 0);
  13.       victim.resize(num_threads, 0);
  14.   }
  15.  
  16.   void Lock(size_t thread_index) {
  17.       for (size_t level = 1; level < num; level++) {
  18.           levels[thread_index] = level;
  19.           victim[level] = thread_index;
  20.  
  21.           bool conflicts_exist = true;
  22.           while(conflicts_exist) {
  23.             conflicts_exist = false;
  24.             for(int another_thread = 1; another_thread < num; another_thread++) {
  25.                 if(another_thread!=thread_index && levels[another_thread] >= level && victim[level] == thread_index) {
  26.                         conflicts_exist = true;
  27.                         break;
  28.                 }
  29.             }
  30.           }
  31.       }
  32.   }
  33.  
  34.   void Unlock(size_t thread_index) {
  35.       levels[thread_index] = 0;
  36.   }
  37.  
  38.  private:
  39.     size_t num;
  40.     std::vector<size_t> levels;
  41.     std::vector<size_t> victim;
  42. };
  43.  
  44. } // namespace solutions
  45. } // namespace tpcc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement