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

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

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

当我们在程序中运用到多线程的时候,那么你必须要考虑的就是各线程抢占资源的问题,不能让同一时间多个线程去抢一个资源,比如你两个线程同时去 *** 作sql,就会造成有脏读数据或者查不到数据,或者查的是脏数据,那么避免这个的办法可以从两边入手,C#程序里加入lock代码断,在里面执行查询sql,这样的话在再一时间,就不会有多个线程同时去执行sql,还可以在数据库中建立一些锁,执行的时候可将锁锁住,但对数据库加锁请小心 加锁和解锁,否则会锁死数据库造成系统崩溃都是有可能 的!

多线程数据填充一般都是一个线程在读取数据,一个线程去更新数据。以下是一个简单的模型:publicclassworker{publicstaticListsourceDatapublicvoidReaddata(){for(inti=0i<10000i++){//读取第i批次的数据lock(sourceData){//将这些数据放入sourceData}}}publicvoidrender(){while(true){lock(sourceData){//从sourcedata中取出新的数据}//将数据填充道UI}}}调用者workerwk=newworker()Threadth1=newThread(newThreadStart(wk.Readdata))Threadth2=newThread(newThreadStart(wk.render))th1.Start()th2.Start()


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

原文地址: http://outofmemory.cn/sjk/9940400.html

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

发表评论

登录后才能评论

评论列表(0条)

保存