C 用于(多个)客户端和服务器游戏的共享内存和信号量
我必须为C语言的课程编写一个小游戏,它必须使用共享内存、信号量和可以处理多个客户机的客户机/服务器体系结构(游戏的确切要求是2) 这两个客户机需要轮流执行,它们由同一个程序表示(此处不涉及fork()-都是从./client开始的) 服务器启动时必须创建所有资源。所以我的主要问题是关于信号量。(共享内存和游戏逻辑的东西可以工作,或者说并不难实现。) 要确定服务器或客户端是否可以访问共享内存,我需要一个信号量。我需要第二个来决定哪个客户端可以访问。我说得对吗 所以我得到了一个提示,可以通过为客户端分配ID来完成。因此,共享内存有三个附加变量,如下所示:C 用于(多个)客户端和服务器游戏的共享内存和信号量,c,multithreading,synchronization,semaphore,shared-memory,C,Multithreading,Synchronization,Semaphore,Shared Memory,我必须为C语言的课程编写一个小游戏,它必须使用共享内存、信号量和可以处理多个客户机的客户机/服务器体系结构(游戏的确切要求是2) 这两个客户机需要轮流执行,它们由同一个程序表示(此处不涉及fork()-都是从./client开始的) 服务器启动时必须创建所有资源。所以我的主要问题是关于信号量。(共享内存和游戏逻辑的东西可以工作,或者说并不难实现。) 要确定服务器或客户端是否可以访问共享内存,我需要一个信号量。我需要第二个来决定哪个客户端可以访问。我说得对吗 所以我得到了一个提示,可以通过为客户端
struct game
{
int id_needed, client_id, id_ready;
... // additional stuff that is needed for the game logic itself
};
当服务器启动时,我将一个信号量初始化为0,另一个信号量初始化为1。
当第一个客户端出现时,它检查他的ID是否仍然为0(初始化为零)
如果是,它会尝试以下方法:
while(my_id == 0)
{
if(semaphore_down(semaphore_1) == 0) // Check if I have access to shared mem
{
shared_memory->id_needed = 1;
if(shared_memory->id_ready == 1)
{
my_id = shared_memory->client_id;
(void) printf("DEBUGGING: My ID is %d\n", my_id);
}
}
}
shared_memory->id_needed = 0;
在服务器上我可以
while(1)
{
if(shared_memory->id_needed = 1)
{
(void) printf("DEBUGGING: ID is needed for another client!");
shared_memory->client_id++;
shared_memory->id_ready = 1;
(void) printf("DEBBUGING: Dispatched new ID: %d", shared_memory->client_id);
}
// If enough players, start the game ...
}
我真的被困在这里了。服务器只是增加ID(这只是逻辑上的),但我无法解决这个问题
我只想让客户端在共享内存和服务器上交替工作,以检查游戏的值等
我以前从未使用过信号量,我找到的所有文档或示例都只使用一个客户机和一个服务器,但从未使用过多个客户机
请开导我 我看到一件奇怪的事情和两件明显是错误的事情
if(共享内存->需要的id=1)
是的,对不起,我忽略了那个。我不得不将所有库调用更改为标准C,因此出现了错误。我在这里使用了一个课程实习生库(不得不),它只是稍微抽象了一下信号量,没有什么特别的。无论如何,我找到了另一个更好的解决办法。