Вы наткнулись на грань огромной религиозной войны, вращаясь вокруг вопроса
Должны ли программы, управляемые событиями, быть написаны с использованием нескольких потоков или одного цикла обработки событий ?
Лагерь потоков полагает, что отдельные сущности, такие как «игроки», легче программировать, когда они пишутся как реальные потоки, возможно, просто отказываясь от процессора, когда они больше не нужны. Информация о состоянии проигрывателя может храниться в локальных переменных и даже в счетчике программы. Но с потоками вам, возможно, придется беспокоиться об атомарности, взаимоблокировке и других радостях параллельного программирования.
Лагерь, управляемый событиями, считает, что гораздо проще получить правильное целое приложение, когда каждый объект способен реагировать на каждое событие, и этот объект получает полный контроль над процессором в течение времени, необходимого для обработки события. (который должен быть конечным, и обычно лучше быть коротким). Нет проблем с параллелизмом, потому что каждый обработчик событий выполняется атомарно, но есть затраты на программирование: когда обработчик события завершается, все его процедуры завершаются, и поэтому информация о его состоянии должна храниться в полях объекта, размещенного на куча.
История потоков имеет тенденцию сиять, когда объект имеет сложный поток управления или хочет использовать много абстракций & mdash; оба из них трудно кодировать без потоков. История событий имеет тенденцию сиять, когда обработчики довольно просты - хорошо, что каждый обработчик выполняется атомарно, не беспокоясь об этом, и это упрощает связь между сущностями.
Прежде чем приступить к выполнению задания, выясните, к какой религиозной группе принадлежит ваш инструктор .
Поскольку вы спрашивали о потоках, я настоятельно рекомендую библиотеки потоков и каналов в C-интерфейсах и реализациях Дэйва Хэнсона . Программное обеспечение бесплатное, и книгу стоит купить - оно включает в себя множество других модулей, которые будут невероятно полезны всем, кто пишет домашние задания на языке C.
Должен ли я работать с каждым игроком как с "веткой" и как с нитями на вилке, или просто создавать какие-то нити для игрока и как-то их ассоциировать?
Если бы вас не попросили использовать fork
, я бы избегал этого - механизмы взаимодействия между процессами Unix не очень приятны для использования. Если вы можете получить библиотеку Hanson, я бы сказал, создайте поток для каждого игрока и попросите игроков общаться друг с другом (и с игровым сервером, который также должен быть потоком), используя каналы Hanson .