void RunBackend(oid_t thread_id) {
  auto txn_count = state.transaction_count;

  UniformGenerator generator;
  Timer<> timer;

  // Start timer
  timer.Reset();
  timer.Start();

  // Run these many transactions
  for (oid_t txn_itr = 0; txn_itr < txn_count; txn_itr++) {
    auto rng_val = generator.GetSample();

    if (rng_val <= 0.04) {
      RunStockLevel();
    } else if (rng_val <= 0.08) {
      RunDelivery();
    } else if (rng_val <= 0.12) {
      RunOrderStatus();
    } else if (rng_val <= 0.55) {
      RunPayment();
    } else {
      RunNewOrder();
    }

  }

  // Stop timer
  timer.Stop();

  // Set duration
  durations[thread_id] = timer.GetDuration();
}
void RunBackend(oid_t thread_id) {

  UniformGenerator generator;

  oid_t &execution_count_ref = abort_counts[thread_id];
  oid_t &transaction_count_ref = commit_counts[thread_id];

  // Run these many transactions
  while (true) {
    if (is_running == false) {
      break;
    }
    auto rng_val = generator.GetSample();
    
    if (rng_val <= 0.04) {
      while (RunStockLevel() == false) {
        execution_count_ref++;
      }
    } else if (rng_val <= 0.08) {
      while (RunDelivery() == false) {
        execution_count_ref++;
      }
    } else if (rng_val <= 0.12) {
      while (RunOrderStatus() == false) {
        execution_count_ref++;
      }
    } else if (rng_val <= 0.55) {
      while (RunPayment() == false) {
        execution_count_ref++;
      }
    } else {
      while (RunNewOrder() == false) {
        execution_count_ref++;
      }
    }

    transaction_count_ref++;

  }
}