https://pharos-tc.com/en/course/612/concurrent-programing-using-c