std::pair<int, int> generateRandomNumbers(){//获取随机数 static std::mt19937 gen(std::random_device{}()); std::uniform_int_distribution<> dis(0, N - 1); int i = dis(gen); int j = dis(gen); return { i, j }; }
voidworkerOperation(int threadId){
for (int k = 0; k < MAXNUM; ++k) { auto tt = generateRandomNumbers(); int i = tt.first; int j = tt.second;
// 保证加锁顺序,从小到大,并且去重 std::vector<int> lockIndexes = { i, (i + 1) % N, (i + 2) % N, j }; std::sort(lockIndexes.begin(), lockIndexes.end()); lockIndexes.erase(std::unique(lockIndexes.begin(), lockIndexes.end()), lockIndexes.end());