我做的是一个建筑软件。当用户画上墙的时候,我们有个线程会偷偷地计算墙的各种信息。
计算的时候,我的后台线程会把它计算的那个墙上读锁。这时候如果用户通过界面删除墙的话,就应该给墙上写锁之后才能删除,但是这时候墙的读锁被计算线程占用了,界面就会卡住。请高人指点:
下面的方案是不可行的:
1、删除的时候开一个删除线程在该删除线程中执行等待写锁的操作。不可行,因为不光会有墙,还有很多很多中东西(柱子、梁、板、、、、)不可能为每个都开一个。如果开了的话修改那也要开。2、一个专门负责修改或者删除的线程,用户下达的指令只是往一个容器中丢东西。负责删除或者修改的线程从这个容器中取出来进行处理。原因如1所说,每个构件的修改逻辑都不一样。请大家给出出主意。