C PTHREAD_MUTEX在DB访问中无法正常工作
C++ pthread_mutex does not work as expected on db access
我是静音使用的新手(仅旧大学课程提供的弱理论知识(。我正在研究有关数据库访问的问题。现在,我将解释我的情况,以便让您更好地了解情况:
存在不同的实体(每个实体都在另一个线程上产生(称为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!
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- C++程序已停止工作-求解常微分方程