利用读写锁实现sqlite多线程写的问题
16lz
2021-01-22
之前项目中利用sqlite存储解析后的数据,网上的资料并没有找到sqlite本身机制对于多线程如何支持,所以就利用每个线程一个库,最后在合并,今天看到读写锁SRWLOCK时,决定尝一下解决多线程写sqlite的问题
如愿解决:
测试代码
main函数中:
sqlite3_open_v2("test.db",&m_db,SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE,NULL);
int nret = sqlite3_exec(m_db,"create table tab1 (ID TEXT)",NULL,NULL,NULL);
InitializeSRWLock(&srwLock);
for (int i = 0 ; i < 10 ; i++)
{
_beginthreadex(NULL,0,WriteThreads,NULL,0,NULL);
}
线程函数:
unsigned WINAPI WriteThreads(void *pPM) { while(1) { Sleep(2000); AcquireSRWLockExclusive(&srwLock); printf("写线程\n"); char chsql[1024] = {0}; sprintf(chsql,"insert into tab1 values ('thread 0X%08X write 1')",GetCurrentThreadId()); int nret = sqlite3_exec(m_db,chsql,NULL,NULL,NULL); if(nret != SQLITE_OK) { printf("================write error============\n"); } ReleaseSRWLockExclusive(&srwLock); } return 0; }
结果展示:
更多相关文章
- SQL Server 2008使用sproc中的函数
- MYSQL存储过程,函数,光标
- 请问mysql中有没有类似math.max(1,2)这种可以比较两个值中最大值
- 线程往数据库里插数据时偶尔会报错
- SQL 函数如何设置参数默认值
- 使用不同的条件,在同一个表的一个SQL查询中使用多个聚合函数
- PHP OOP - 调用非obj上的成员函数[重复]
- sqlserver的常用函数
- SQLSERVER2005调试存储过程跟函数