Questions tagged «concurrency»

2
寻找僵局
寻找僵局 对多线程应用程序进行编程时,必须格外小心,以避免在访问共享资源时死锁各个线程。一个死锁发生时线程试图访问要锁定在另一个线程在同一时间,其他线程试图访问由第一锁定的资源的资源。这是简单的情况,但是如果资源链较长,则可能变得更加复杂。 挑战 您应该编写一个程序或函数,以在每个线程访问的资源列表中检测可能的死锁情况。这是代码高尔夫球,因此最短答案以字节为单位。 每个线程是同时启动的,但是之后它们可以按交错的任意组合运行。如果有2个线程,每个4个动作,它可以作为运行(其中,每个数字是具有该ID采取的线程的动作)1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,2,1,2,1,2,1,2,1,1,2,2,2,2,1,1,或任何其它可能的组合。 输入值 您将通过STDIN,函数参数或最接近的替代方法接收字符串列表。每个字符串将采用格式+a -b。该字符串中的每个字符串都表示线程对资源的locking(+)/ unlocking(-)。每个线程之间将有一个---分隔符。确保线程不会尝试锁定已锁定的资源,并且所有线程将在退出前显式解锁其锁定的所有资源。下面是一个示例来演示: +a # Lock resource a +b # Lock resource b -a # Unlock resource a -b # Unlock resource b --- # Thread separator +b # Lock resource b -b # Unlock resource b 输出量 如果输入不包含任何可能的死锁,则输出为假,如果输入包含可能的死锁情况,则输出为假。例如: true false 1 0 都是有效的输出,但是任何明确定义为“真/假”的内容都可以接受。 …

18
创建死锁的最短代码
编写最短的代码以创建死锁。代码执行必须停止,所以这不起作用: public class DeadlockFail extends Thread{ //Java code public static void main(String[]a){ Thread t = new DeadlockFail(); t.start(); t.join(); } //this part is an infinite loop; continues running the loop. public void run(){while(true){}} } 它并不需要是肯定的代码进入僵局,就几乎可以肯定(如果你运行了无限的时间,它会死锁)。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.