2014-01-19 127 views
0

我在我的业余爱好项目工作共享的数据量较大,在线跳棋板游戏,基于IOCP multithredaed服务器上。EnterCriticalSection的和多线程服务器

下面是主板和观众的结构:

typedef struct _board { 
      .... 
     PPER_viewer    Viewerlist; 
      ... 
    } board, *PPER_board; 

    typedef struct _viewer { 
    SOCKET sc; 
    struct _viewer *pCtxtBack; 
    struct _viewer *pCtxtForward; 
    } viewer, *PPER_viewer; 

Viewerlist在董事会结构是观众的双向链表的开始。当玩家坐下/到达特定的棋盘时,该列表会更新为查看器结构。我还使用查看器列表将片段移动发送给桌面上的所有查看者。由于多线程,我在查看器列表上使用EnterCriticalSection。

我的困惑:如何应对情况,当时有10打开我的服务器主板?对所有打开的电路板使用相同的临界区似乎是不合适的?例如,在30个开放板的情况下我应该为每个板子制作30个分开的Entercriticalsection?

在此先感谢您的帮助。

回答

1

您需要临界区对象与共享数据之间的一对一关系。所以如果电路板彼此独立,那么每个电路板都有一个关键部分。

+0

是初始化临界区的大量与InitializeCriticalSection当服务器启动,做出某种池或它们的阵列,并且,neccesary时采取的关键部分从池好主意吗? – maciekm

+0

否。创建共享数据时初始化它们。当共享数据死亡时完成它们。 –