C PTHREAD_MUTEX在DB访问中无法正常工作

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

本文关键字:常工作 工作 PTHREAD MUTEX 访问 DB      更新时间:2023-10-16

我是静音使用的新手(仅旧大学课程提供的弱理论知识(。我正在研究有关数据库访问的问题。现在,我将解释我的情况,以便让您更好地了解情况:

存在不同的实体(每个实体都在另一个线程上产生(称为a,b和c,在读/写入数据库(sqlite3 database(的读/写入singleton类中,称为db_manager(拥有如此集中的类别,管理所有功能(。由于我正在使用一种在自定义HW上运行的软件,因此我无法使用C 11(默认情况下,我知道Singleton模式是线程安全的(。我的问题是我无法避免在三个实体A,B和C之间并发。

使用Getter方法,我已将Mutex声明为DB_Manager类的成员变量。从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实体的代码的每个关键部分中都复制了此行为。

运行后,每个循环都会段落(我知道这一点,因为我将日志打印放在段循环中(,然后全部被阻止。我不知道发生了什么。我尝试了网络上发现的所有不同可能性。

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

按照@nos的建议,我在静音锁上删除了一段时间,只是一切正常!新手错误...但是幸运的是!谢谢@nos!