mysql的多线程安全问题

本文探讨了MySQL在多线程环境下可能出现的安全问题,重点在于`mysql_init()`函数的线程安全性。虽然不是完全线程安全,但若在程序初始化时调用一次,后续线程使用则安全。解决方案包括将`mysql_init()`与`mysql_real_connect()`配合使用,或者调用`mysql_thread_init()`和`mysql_thread_end()`进行线程相关数据的初始化和清理。
摘要由CSDN通过智能技术生成
多线程情况下, mysql_init会设置线程的私有数据,如果不注意,则会在mysql_real_connect时出现段错误。
错误如下:
void* func(void* arg)
{
	MYSQL* mysql = (MYSQL *)arg;
	mysql_real_connect(mysql, “127.0.0.1″, “root”, “123456″, “chen”, 1234, NULL, 0);
	mysql_close(mysql);
	return (void *)0;
}
int main()
{
	MYSQL mysql;
	if (NULL == mysql_init(&mysql))
	{
		return -1;
	}
	pthread_t thread;
	pthread_create(&thread, NULL, func, &mysql);
	pthread_join(thread, NULL);
	return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值