C++ pthread_mutex 在数据库访问上没有按预期工作

C++ pthread_mutex does not work as expected on db access

我对互斥体的使用很陌生(旧大学课程只提供薄弱的理论知识)。我正在处理有关数据库访问的问题。我现在解释一下我的情况,以便您更好地了解情况:

存在称为 A、B 和 C 的不同实体(每个实体都在不同的线程上产生),它们通过名为 class 的单例访问 read/write 中的数据库(sqlite3 数据库) DB_Manager(有一个管理所有功能的集中 class)。 因为我正在开发一个在自定义硬件上运行的软件,所以我无法使用 C++11(我知道单例模式默认情况下是线程安全的)。我的问题是我无法避免三个实体 A、B 和 C 之间的并发。

我已经用getter方法将互斥量声明为DB_Managerclass的成员变量。从 A、B 和 C 开始,每当出现关键代码区域时,我将执行以下操作:

lock_db=DB_Manager->getMutex();

while(pthread_mutex_lock(lock_db) < 0)
{
  //loop in order to wait the release of the mutex because has being locked by someone else
      }
 //here, the mutex has been succesfully locked

 //HERE RESIDE THE CRITICAL PART OF CODE

pthread_mutex_unlock(lock_db);   //release the mutex

A、B 和 C 实体代码的每个关键部分都复制了此行为。

一次 运行,每个都执行一个 while 循环(我知道这一点是因为我在 while 循环中放置了日志打印),然后全部被阻止。我不知道发生了什么。我尝试了在网上找到的所有不同的可能性。

我承认我是并发编程的新手,所以我可能会遗漏一些东西。

正如@nos 所建议的,我删除了互斥锁上的 while,然后一切都好了! 新手错误...但幸运的是修复了! 谢谢@nos!