1

所以情况就是这样,我必须在unix中使用c开发一个多人游戏。现在我创建了套接字,服务器和客户端通信正常。现在这个游戏包括一个棋盘,所以每个客户端都有自己的 100x40 的 2d 数组,并且他们使用读/写(这也可以)将 x 和 y 位置发送到服务器。

现在,在服务器中,我正在使用 fork() 以便新客户端可以加入游戏。在孩子的部分,我收到 x 和 y 位置。现在我的问题是,如何将 x 和 y 位置存储到服务器中的“全局”板[100][40](因此我可以检查冲突等)。我发现的困难是每个孩子都有自己版本的板,因为我使用的是 fork(),而且我只是更新那个特定孩子的板。我希望每次客户端发送它的 x 和 y 位置时,我都会将它们放在服务器中找到的板上。

我读过我需要使用某种 IPC,比如共享内存,但无法弄清楚。如果有人可以提供帮助,将不胜感激,谢谢。

4

3 回答 3

2

使用共享内存 API 调用:shmget, shmat, shmdet, ...示例代码

如果服务器很简单,您可以使用线程。使用线程,您可以简单地访问相同的全局变量。

于 2012-04-14T15:32:06.303 回答
1

您可以使用线程而不是进程,因为它们是轻量级的,即它们的开销要少得多。这个想法是在堆上分配板,以便在此进程中的所有线程之间共享它。

当有新玩家加入游戏时,创建一个新线程

当玩家需要更新他们的棋盘信息时,应该以互斥的方式访问共享棋盘以防止竞争条件,例如:

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
}
于 2012-04-14T15:39:07.853 回答
0

使用数据库将解决您所有的锁定/并发问题。

于 2012-04-14T15:45:46.860 回答