仅在没有锁定时从线程对象读取

时间:2016-10-20 14:25:24

标签: c# multithreading thread-safety locking

好的,我知道这通常不是你想要的东西,但我似乎无法找到一个好方法。

我有主线程和工作线程。 当工作线程完成时,它锁定并且主线程想要读取每个帧的对象。 (每16ms一次) 现在数据被锁定,工作线程需要一段时间来更新这些数据。 (在这种情况下为66ms)这意味着主线程将进入锁定并在那里停留50~ms,等待锁定进入。

现在我希望每当工作人员传递新数据时都会更新此主线程。但是当这个工作线程锁定那些数据时,我不希望主线程被锁定。我希望主线程只跳过该部分并使用该帧的过时数据。

看到工作线程填充数据需要多长时间,似乎更新主线程的备份/过期数据副本大致需要花费很长时间。而且由于代码首先不是我的代码,我不能只是抛出工作线程来为整个对象实现一个A / B注册表(所以每次都要切换新旧代码)使用2倍内存的成本)

有没有办法解决这个问题而不锁定我的主线程,也没有错过任何数据更新? (例如,如果主线程没有在它释放的纳秒内抓住它,那么worker几乎可以立即重新启动线程)

提前致谢!

0 个答案:

没有答案