“生命游戏”的多线程算法思考

本文讨论了Intel多线程编程大赛中的“生命游戏”问题,这是一个经典的细胞自动机。文章介绍了生命游戏的规则,并探讨了从细胞和网格角度设计的两种不同算法。重点在于如何将串行程序转化为并行多线程程序,提出了使用std::vector替代链表作为数据结构,并通过线程池实现并行化的思路。文章鼓励读者尝试使用线程库如Intel Threading Building Blocks来解决这个问题。
摘要由CSDN通过智能技术生成
Intel正在ISN网站上举办一个多线程编程大赛,值得关注。Intel过去几年举办过好几次线程技术大赛,包括与topcoder合作的一些竞赛,质量都不错。题目难度适中,而且具有启发性,对多核编程感兴趣的C/C++程序员应该关注一下。其实参与这样的活动,置身于竞赛气氛当中,无论是否获奖,都可以在短时间内大幅度地提高对多线程编程的理解。这次比赛比较有特色,为期长达几个月之久,而且每个月都有一轮竞赛,每月评选一轮优胜奖,奖品也很诱人,是一颗4核的酷睿2CPU ;-)

本月(2008年1月)的题目是一个经典问题“生命游戏”。这是英国数学家John Conway发明的一个有趣的游戏。不过这个游戏之所以名声大噪,还得归功于著名科普作家马丁•伽德纳。他在1970年10月号的《科学美国人》杂志“数学游戏”专栏介绍了生命游戏,不但让大众迷上这个游戏,也令多专业数学家产生了研究的兴趣,甚至产生了一个新的数学研究领域cellular automata(细胞自动机?),听说这个领域还对模拟类游戏产生了影响,不知是否确有其事。

大致来说,生命游戏是这样玩的。在一个由正方形小格子组成的二维网格(就像国际象棋棋盘那样)里,生活着一群细胞。每一个细胞占据一个小格子。它的四邻左右(最多)有8个格子,如果那些格子里也生活着细胞,那么这些细胞就成为“邻居”。

细胞对生存环境要求苛刻,太孤独的话会死。但是食物有限,所以太拥挤也会死。细胞还需要繁衍生息
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值