C使用fork()共享内存

时间:2012-04-14 15:26:36

标签: c fork shared-memory

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

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

我已经读过我需要使用某种类型的IPC,比如共享内存,但无法弄明白。如果有人能提供帮助,将不胜感激,谢谢。

3 个答案:

答案 0 :(得分:2)

使用共享内存API调用:shmgetshmatshmdet,... 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)

使用数据库可以解决所有锁定/并发问题。