Я работаю над своим хобби-проектом, играми в онлайн-шахматы, основанным на многопоточном сервере iocp.EnterCriticalSection и большое количество общих данных на многопоточном сервере
Ниже структура совета и зрителя:
typedef struct _board {
....
PPER_viewer Viewerlist;
...
} board, *PPER_board;
typedef struct _viewer {
SOCKET sc;
struct _viewer *pCtxtBack;
struct _viewer *pCtxtForward;
} viewer, *PPER_viewer;
Viewerlist в правлении структура представляет собой начало двусвязного списка просмотра. Список обновляется с помощью структуры зрителя, когда игроки садятся/до определенной доски. Я также использую Viewerlist, чтобы отправить кусочек движения всем зрителям за столом. Из-за многопоточности я использую EnterCriticalSection в списке просмотра.
Мое замешательство: как бороться с ситуацией, когда на моем сервере 10 открытых плат? Кажется, нецелесообразно использовать одну и ту же вводную секцию для всех открытых плат? Например, в случае 30 открытых плат. Должен ли я сделать 30 разделенных Entercriticalsection для каждой платы?
Заранее благодарю за вашу помощь.
Следует ли инициализировать большое количество критической секции с помощью InitializeCriticalSection при запуске сервера, создать какой-то пул или массив из них и взять критический раздел из пула, когда это необходимо? – maciekm
Нет. Инициализируйте их при создании общих данных. Завершите их, когда сработает общая информация. –