gpt4 book ai didi

c - 多线程或带线程的进程

转载 作者:太空狗 更新时间:2023-10-29 15:34:03 25 4
gpt4 key购买 nike

我必须模拟一个游戏,每个玩家都有轮流,并且需要“注意”正在发生的事情。

到目前为止,我知道每个玩家都需要两个线程,一个会休眠直到轮到玩家,另一个会注意。

我的问题是:我应该将每个玩家作为一个“ fork ”和 fork 上的线程,还是只为玩家创建一些线程并以某种方式将它们关联起来?

这是我第一次使用并发、信号量和线程,所以我不确定好的做法和编程风格。

最佳答案

围绕着这个问题,你陷入了一场巨大的宗教 war 的边缘

Should event-driven programs be written using multiple threads or using a single event loop?

线程阵营认为,像“玩家”这样的个体实体在编写为实际线程时更容易编程,可能会在不再需要处理器时明确放弃处理器。有关玩家状态的信息可以存储在局部变量中,甚至可以存储在程序计数器中。但是对于线程,您可能不得不担心原子性、死锁和并发编程的其他乐趣。

事件驱动阵营认为,当每个实体都能够响应每个事件并且该实体在处理事件所需的时间内完全控制处理器时,让整个应用程序正确运行要容易得多(最好是有限的,通常最好是短的)。不用担心并发性,因为每个事件处理程序都是原子执行的,但是有编程成本:当事件处理程序完成时,它的所有过程都退出,所以关于它的状态的信息必须存储在分配给堆。

当实体具有复杂的控制流或想要使用大量抽象时,线程的故事往往会大放异彩——如果没有线程,这两种情况都很难编码。当处理程序相当简单时,事件故事往往会大放异彩——让每个处理程序以原子方式执行而无需担心,这很棒,而且它简化了实体之间的通信。

在继续你的作业之前,找出你的导师属于哪个宗教团体

既然你问过线程,我强烈推荐 Dave Hanson 的线程和 channel 库 C Interfaces and Implementations .该软件是免费的,而且这本书值得购买——它包括许多其他模块,对于任何用 C 语言编写家庭作业的人来说都是非常有用的。

Should I work each player as a 'fork' and the threads on the fork, or just create some threads for the player and associate them somehow?

除非您被要求使用 fork,否则我会避免使用它 — Unix 进程之间的通信机制使用起来不是那么愉快。如果您可以获得 Hanson 库,我会说为每个玩家创建一个线程,并让玩家使用 Hanson 的 channel 相互通信(以及与游戏服务器,这也应该是一个线程) .

关于c - 多线程或带线程的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2534998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com