0

我对我当前的游戏服务器设计持怀疑态度,并正在寻求实际指导。我目前正在预分配固定数量的客户端,它们在类中具有自己的接收缓冲区,已预分配。一切都好,直到我遇到处理数据包的点,我需要回复。我当前的设计是预先分配固定数量的发送缓冲区,并以无锁的方式从空闲列表中取出一个,并在发送数据包后将其放回。我想知道正确的方法是使用无锁空闲缓冲区列表,还是每次发送新数据包时都需要调用 new/delete。

目前的方式:

T_SendBufferTCP* CServer::GetFreeSendBuffer()
{
    for (int i = 0; i < SEND_BUFFER_COUNT; i++)
    {
        if (__sync_val_compare_and_swap(&pSendBuffers[i]->iOwnedCount, 0, 1) == 0)
        {
            return pSendBuffers[i];
            break;
        }
    }

    printf("No Free SendBuffers.\r\n");
    exit(0);

    return NULL;
}
4

0 回答 0