#include #include #include #include #include #include using namespace std; void chel(int me, int total, mutex *sticks, mutex *sup) { int left = (me + total - 1) % total; int right = me % total; if (left > right) swap(left,right); printf("[%d]: try lock %d\n", me, left); sticks[left].lock(); printf("[%d]: try lock %d\n", me, right); usleep(1000); sticks[right].lock(); printf("[%d]: eating\n", me); usleep(1000000); sticks[right].unlock(); sticks[left].unlock(); printf("[%d]: sleeping...\n", me); } int main(int argc, char **argv) { const int THREADS = argc > 1 ? stoi(argv[1]) : 5; vector mutexes(THREADS); vector threads(THREADS); mutex super; for (int i = 0; i < THREADS; i++) { threads[i] = thread(chel, i, THREADS, &mutexes[0], &super); } for (int i = 0; i < THREADS; i++) { threads[i].join(); } printf("Thats all!!!!!!!\n"); }