多线程拼图

sen*_*nfo 23 puzzle parallel-processing multithreading

我正在尝试提出一些专注于多线程的编程难题.到目前为止,我能够提出的大部分问题都是针对特定领域的.对于试图学习多线程应用程序核心概念的开发人员,是否有任何人有任何体面的编程难题?

mek*_*ian 11

此链接涵盖了许多主题.

ThreadMentor的多线程编程:教程

编辑:

以下是该链接中列出的问题的一些直接链接,以及它们的初始描述.

ThreadMentor:餐饮哲学家的问题
线索导师:餐饮哲学家的问题:左撇子版本

餐饮哲学家的问题是由EW Dijkstra发明的.想象一下,五个哲学家只是在思考和东方生活.餐厅中间是一张带五把椅子的圆桌.桌子上有一大盘意大利面.但是,只有五根筷子可用,如下图所示.每个哲学家都在想.当他饿了,他坐下来拿起最接近他的两根筷子.如果一个哲学家可以拿起两根筷子,他会吃一段时间.在一位哲学家吃完之后,他放下筷子开始思考.

ThreadMentor:吸烟者的问题

这个问题是由于1971年的SS Patil造成的.假设一支卷烟需要三种成分,烟草,纸张和火柴.有三个连锁吸烟者.他们每个人只有一种无限供应的成分.有一种代理人可以无限供应所有三种成分.为了制作香烟,吸烟者必须使用另外两种成分纸和烟草(分别是烟草和火柴,以及烟草和纸).代理人和吸烟者共用一张桌子.代理人随机生成两种成分,并通知需要这两种成分的吸烟者.一旦从桌子上取出配料,代理商再提供两个.另一方面,每个吸烟者等待代理人的通知.一旦通知,吸烟者拿起食材,抽一支烟,抽烟一会儿,然后回到桌边等待下一份食材.

ThreadMentor:生产者/消费者(或有界缓冲区)问题

假设我们有一个循环缓冲区,其中有两个指针输入和输出,用于指示下一个可用于存放数据的位置以及包含要检索的下一个数据的位置.见下图.有两组线程,生产者和消费者.每个生产者将数据项存入就位并使指针前进,并且每个消费者将位置输出的数据项检索出来并使指针前进.

ThreadMentor:过山车问题

假设有n名乘客和一辆过山车.乘客反复等待乘坐汽车,这可以容纳最多C乘客,其中C <n.但是,只有在满车时,汽车才能绕过赛道.完成骑行后,每位乘客在游乐园周围游荡,然后返回过山车再骑一次.出于安全原因,该车只能骑行T次然后开枪.

这个有其他限制:

  1. 这辆车总是和C乘客一起骑行;
  2. 汽车行驶时,没有乘客会从车上跳下来;
  3. 汽车行驶时,没有乘客会跳上车;
  4. 在下车之前,没有乘客会要求再次乘车.

ThreadMentor:桥梁问题

这个的描述依赖于图像.这是修改后的引用,删除了图像引用.

考虑一个狭窄的桥梁,只允许同一方向的三辆车同时穿过.如果桥上有三辆车,任何进入的车辆必须等到桥梁畅通.

当车辆驶离桥梁时,我们有两种情况需要考虑.案例1,桥上还有其他车辆; 而案例2现有车辆是桥上的最后一辆.在第一种情况下,应允许一辆同一方向的新车继续行驶.

案例2更复杂,有两个子类.在这种情况下,出口车辆是桥上的最后一辆车.如果有车辆在相反方向等待,则应允许其中一辆继续行驶.或者,如果没有车辆在相反方向等待,则让等待的车辆朝同一方向行驶.


Ric*_*dOD 6

哲学家进餐问题,是我第一个想到的.