这是我的问题的描述:
我的程序中有 2 个线程。一个是主线程,另一个是我使用pthread_create创建的
主线程在sqlite3 数据库上执行各种功能。每个功能都会打开以执行所需的操作,并在完成后关闭它。
另一个线程只是在设定的时间间隔后从数据库中读取数据并将其上传到服务器上。该线程还打开和关闭数据库以执行其操作。
当两个线程碰巧打开数据库时,就会出现问题。如果一个先完成,它将关闭数据库,从而导致另一个崩溃,从而使应用程序无法使用。Main 需要用于每个操作的数据库。
有什么办法可以防止这种情况发生吗?互斥锁是一种方法,但如果我使用互斥锁,它会使我的主线程无用。主线程必须始终保持功能,其他线程在后台运行。
任何使这项工作的建议都会很棒。我没有提供片段,因为这个问题有点太大了,但如果你对这个问题一无所知,请告诉我。
编辑:
static sqlite3 *db = NULL;
打开数据库的代码片段
int open_database(char* DB_dir) // argument is the db path
rc = sqlite3_open(DB_dir , &db);
if( rc )
{
//failed to open message
sqlite3_close(db);
db = NULL;
return SDK_SQL_ERR;
}
else
{
//success message
}
}
return SDK_OK;
}
并关闭数据库
int close_database()
{
if(db!=NULL)
{
sqlite3_close(db);
db = NULL;
//success message
}
return 1;
}
编辑:我忘了补充一点,后台线程执行一个单一的写入操作,为它上传到服务器的每一行更新表的 1 个字段