如何为多线程生产者 - 消费者C程序编写好的测试?
我知道GDB可用于调试线程,但我相信GDB还会阻止当前正在调试的线程,而其他线程继续运行。
我想通过我的线程测试正确的互斥锁运气/解锁和阻塞。我环顾四周但却找不到任何好的资源。
我对所有非并发功能进行了单元测试,但希望确保我的并发性是正确的。怎么办呢?
答案 0 :(得分:0)
我相信当其他线程继续运行时,GDB也会停止当前正在调试的线程。
您的信念是错误的:默认情况下,GDB以class crud
{
private $db;
function __construct($DB_con)
{
$this->db = $DB_con;
}
public function create($fname,$lname,$email,$contact,$nimagen)
{
try
{
$stmt = $this->db->prepare("INSERT INTO tbl_users(first_name,last_name,email_id,contact_no) VALUES(:fname, :lname, :email, :contact)");
$stmt->bindparam(":fname",$fname);
$stmt->bindparam(":lname",$lname);
$stmt->bindparam(":email",$email);
$stmt->bindparam(":contact",$contact);
$stmt->execute();
return true;
}
catch(PDOException $e)
{
echo $e->getMessage();
return false;
}
}
}
模式运行:停止一个线程会停止 all 。
较新的GDB版本也有all-stop
模式,其他线程继续运行,但这不是默认模式。
想确保我的并发性是正确的。
通过测试证明并发是正确的不可能。你只能通过编写正确的代码(并仔细阅读)来做到这一点。
Clang thread safety analysis可以提供帮助。在thread sanitizer下进行测试可能有所帮助。 GDB通常是错误的工具。