首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理UI线程和后台线程之间共享的资源

如何处理UI线程和后台线程之间共享的资源
EN

Stack Overflow用户
提问于 2013-04-25 21:45:32
回答 2查看 633关注 0票数 1

让我们从一个UI线程(WPF,WinForms也可以)开始,UI线程创建一个后台线程来做一些工作(线程池),完成后后台线程更新UI (使用dispatcher)。UI线程与后台线程共享资源,当后台线程完成其处理时,需要处理该资源。

实现这一点的最好方法是什么,当后台线程完成其工作时,我们是否处理后台线程本身的资源?如果是这样,我们就不能在创建线程后使用来自UI线程的资源,因为我们不知道后台线程什么时候完成,反之亦然。(这里没有异步/等待功能可用)。因为我们在这里处理UI线程,所以需要让GUI始终保持活动状态。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-25 21:56:32

我更喜欢让一个线程“拥有”资源并对其进行管理。如果UI线程拥有它,那么它可以将资源“借给”后台线程,但UI线程仍然负责处理它。这样,UI线程就可以使用该资源,并知道它是否被释放。

如果可能,最好让后台工作人员“拥有”资源,这样它就可以处理它,但在您的情况下,这听起来是不可能的。

票数 1
EN

Stack Overflow用户

发布于 2013-04-25 22:55:33

您可以为资源实现引用计数器。由于您知道有两个线程正在使用该资源,因此使用值2启动计数器。

每当线程使用完资源时,它都必须减少引用计数。当引用计数达到0时,可以释放资源。由于您使用的是线程,因此需要将其与锁同步。一些伪代码:

代码语言:javascript
复制
int myResourceRefCount = 2;
object syncLockObject = new Object();

void DecreaseRefCountForMyResource() {
    lock(syncLockObject) {
       --myResourceRefCount;
       if(myResourceRefCount == 0)
           DisposeMyResource();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16216469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档