如何为多线程生产者 - 消费者C程序编写测试?

时间:2015-10-12 19:28:27

标签: c multithreading testing gdb

如何为多线程生产者 - 消费者C程序编写好的测试?

我知道GDB可用于调试线程,但我相信GDB还会阻止当前正在调试的线程,而其他线程继续运行。

我想通过我的线程测试正确的互斥锁运气/解锁和阻塞。我环顾四周但却找不到任何好的资源。

我对所有非并发功能进行了单元测试,但希望确保我的并发性是正确的。怎么办呢?

1 个答案:

答案 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通常是错误的工具。