所以情况就是这样,我必须在unix中使用c开发一个多人游戏。现在我创建了套接字,服务器和客户端正在通信。现在这个游戏包括一个板,所以每个客户端都有自己的2d阵列100x40,他们使用读/写(也可以正常工作)向服务器发送x和y位置。
现在,在服务器中,我正在使用fork(),以便新客户端可以加入游戏。在孩子的部分,我正在接收x和y位置。现在我的问题是,如何将x和y位置存储到服务器中的“全局”板[100] [40](因此我可以检查冲突等)。我发现的困难是每个孩子都有自己的版本,因为我正在使用fork(),而我只是更新那个特定孩子的董事会。我希望每次客户端发送x和y位置时,我将它们放在服务器中找到的板上。
我已经读过我需要使用某种类型的IPC,比如共享内存,但无法弄明白。如果有人能提供帮助,将不胜感激,谢谢。
答案 0 :(得分:2)
使用共享内存API调用:shmget
,shmat
,shmdet
,... Example code。
如果服务器很简单,您可以使用线程。使用线程,您只需访问相同的全局变量。
答案 1 :(得分:1)
您可以使用线程而不是进程,因为它们是轻量级的,即它们的开销要小得多。我们的想法是在堆上分配板,以便在此过程中的所有线程之间共享。
当有新玩家加入游戏时,create a new thread。
当玩家需要更新其电路板信息时,应以互斥的方式访问共享电路板,以防止race condition,例如:
void UpdateBoard(int X, int Y)
{
// e.g., pthread_mutex_lock
Enter critical section
..
Update board(X, Y)
..
// e.g., pthread_mutex_unlock
Leave critical section
}
答案 2 :(得分:0)
使用数据库可以解决所有锁定/并发问题。