我调试了这段代码,我不明白为什么会出现死锁。执行此代码时,它看起来像是join方法中的主线程锁,而另一个线程正在等待获取锁。
session_start();
if(isset($_POST)){
$is_success = my_method_todo_some_task($_POST);
if($is_success ){
$_SESSION['added'] = 1;
header('Location: my_website_page.php?id='.$my_var.'&added=1');
exit;
}else{
$_SESSION['added'] = 0;
header('Location: my_website_page.php?id='.$my_var.'&added=0');
exit;
}
}
if(!empty($_SESSION['added'])) {
echo 'Your message here';
unset($_SESSION['added']);
}
感谢您的帮助!
答案 0 :(得分:5)
那是因为Thread.join()
没有释放任何锁定。您设计了一个完美工作的死锁,其中Thread-1
等待Thread-2
因Foo
已锁定而死,而Thread-2
正等待锁定{{1} }}
(从技术上讲,当前的实现确实发布了锁,因为它在Foo
上同步时在内部使用wait()
。但这是一个与用户代码无关的内部机制)