gpt4 book ai didi

MYSQL C 连接器

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:58 27 4
gpt4 key购买 nike

我有一个 C 进程正在快速写入 mysql 数据库~每秒 10 次。此过程使用 MySql C 连接器。

运行约2分钟后,进程挂起,系统监视器显示

 "futex_wait_queue_me"

,还有

"Can't initialized threads: error 11" 

打印到控制台,我假设由 C 连接器库(因为我不打印它)。在写入之后,与 mysql 的连接失败并显示

"MySQL server has gone away".

这可能是什么原因造成的?我只在 1 个线程中写作。

仅供引用,我正在使用这个库。互斥锁和解锁是为将来准备的,因为我将对日志记录进行多线程处理。实际应用程序中的日志记录事件会少得多,但我试图在这个特定测试中尽可能多地强调它。

//pseudocode:
while(1)
mutexlock
connect();
mysql_query();
disconnect();
sleep(100ms);
mutexunlock


A better solution, maybe not the best
connect();
while(1)
mutexlock

if error on mysql_query();
disconnect();
connect();
sleep(100ms);
mutexunlock



//connect/disconnect functions
int DBConnector::connect()
{
if(DBConnector::m_isConnected) return 0;//already connected...
if(!mutexInitialized)
{
pthread_mutex_init(&DBLock, 0);
}
if(mysql_library_init(0, NULL, NULL))
{
LoggingUtil::logError("DBConnector.DB_connect [DB library init error] " + string(mysql_error(&DBConnector::m_SQLHandle)));
DBConnector::m_isConnected = false;
return -1;
}

if((mysql_init(&m_SQLHandle)) == NULL)
{
LoggingUtil::logError("DBConnector.DB_connect [DB mysql init error] " + string(mysql_error(&DBConnector::m_SQLHandle)));
DBConnector::m_isConnected = false;
return -1;
}

if((mysql_real_connect(&DBConnector::m_SQLHandle, host.c_str(), user.c_str(), pw.c_str(), db.c_str(), port, socket.c_str(), client_flags)) == NULL)
{
LoggingUtil::logError("DBConnector.DB_connect [DB Connect error] " + string(mysql_error(&DBConnector::m_SQLHandle)));
DBConnector::m_isConnected = false;
return -1;
}

DBConnector::m_isConnected = true;
return 0;
}
int DBConnector::disconnect()
{
DBConnector::m_isConnected = false;
mysql_close(&DBConnector::m_SQLHandle);

mysql_library_end();
return 0;
}

最佳答案

尽量不打电话

mysql_library_init(0, NULL, NULL);

mysql_library_end();

在每次连接尝试时。

另外,您的第二个想法是不要在每次访问 mysql 时都重新连接,因为建立连接总是需要一些时间/资源。在您的情况下一无所获。

查询失败后,无需重新连接数据库。

关于MYSQL C 连接器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7722499/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com