A1...A10共10线程,这个10个线程从数据库中取出数据给下面的b1-b15用B1...B15共15个线程,这15线程从A1..A10线程获取要处理的数据,处理后,再更新到数据库
现在的问题是:a系列线程,有可能取到重复的数据,当b还没来得及更新到库中是地,a系列线程又取了
怎么才能解决这问题
用数据库本身事务没法解决这情况
现在的问题是:a系列线程,有可能取到重复的数据,当b还没来得及更新到库中是地,a系列线程又取了
怎么才能解决这问题
用数据库本身事务没法解决这情况
调试欢乐多
就把A所要用到的所有的读取数据库中数据的方法锁上不如用个变量标记如果没有办法判断B中的操作是否都完成了那么这是个无解的错误设计
我想问一下,必须用10个线程从库里拿么?
是从一张表还是从10张不同的表?抑或是每个线程都使用不同的条件?
B1...B15共15个线程,这15线程从A1..A10线程获取要处理的数据,处理后,再更新到数据库
还是要问一下,你确定是B系列线程是从A系列线程处获取数据,而不是A系列线程申请B系列线程,并将数据给B
现在的问题是:a系列线程,有可能取到重复的数据,当b还没来得及更新到库中是地,a系列线程又取了
就事论事的话,一个比较简单的办法:在a取数据的表里增加updatetime字段,
a取数据的时候总是记住本次取走的数据的updatetime,最新值,然后下次取的时候,在sql中增加updatetime>lastMaxUpdateTime判断
b更新的时候修改updatetime俺还是更感兴趣你要干什么,如果能把需求说说,也许可以考虑其它优化手段。
读线程只读updated=1的记录,然后讲updated更新为0
写线程只更新那些updated=0的记录
同时注意处理好并发的问题
LX的顺便说说这个是生产者消费者问题还是读者写者问题(感觉更像读者写者问题),OS学得实在是不咋的
b线程从队列中取出数据处理
队列用同步控制,当队列为空时,b等待,当队列满时a等待
a存入一个数据则唤醒b,b取出一个数据则唤醒a
可以用现成的Queue,a,b也可以用线程池
A线程就是取数据
B线程就是更新数据数据似乎没有冲突!检查A与B在一个进程中是否可以并行!查看读线程与写线程变量集合。
R(A)∩W(B)∪ R(B)∩W(A)∪ W(A)∩W(B)={}
是这样吗??