两个线程进程 同时 查询修改一张mysql数据库的表 需要加锁吗, 还是说mysql自己能处理这种条件竞争

两个线程进程 同时 查询修改一张mysql数据库的表 需要加锁吗, 还是说mysql自己能处理这种条件竞争,第1张

数据库有自己的连接锁机制,如果是针对同一台机器使用同一个接口进行插入的话多线程和单线程是一样的。除非你有好几台数据库服务器,这样再使用多线程来进行上面的工作的话效率才会明显提高。两个线程/进程 同时 查询/修改一张mysql数据库的表 需要加锁吗, 还是说mysql自己能处理这种条件竞争

在ado.net 2.0中可用异步命令试试。为了启用异步命令必须在连接字符串中把Async属性设置为true,以下是一个异步 *** 作的例子:

//Begin executing the command

IAsyncResult ar=cmd.BeginExecutereader(new AsyncCallback(ProcessData),cmd)

启动异步 *** 作以后,可以不管它而做任何其他工作。在该 *** 作结束时调用指定的回调函数。回调函数如下:

public void processData(IAsyncResult ar)

{

SqlCommand cmd=(SqlCommand)iar.AsyncState

SqlDataReader reader=cmd.EndExecuteReader(iar)

...

}

多线程 *** 作,请确保每个线程 *** 作的SQL语句中的表是相对独立的。 不然,你需要安排线程间的顺序,也就是lock代码段。 同一时间,两个线程一起跑同一句SQL,而且还 *** 作同一张表,那么,肯定就会有问题了。

一般这种是因为超出数据库最大链接上限。再建立链接,不管缓存多少,会自动队列消息等待。Timeout时间内没有链接取消无法获得链接权限。可以将自己的数据库链接个数设置大一些。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10022077.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存