gpt4 book ai didi

c# - 使用 Dispatcher.Invoke/BeginInvoke 本身是否提供对一段代码的互斥访问?

转载 作者:太空宇宙 更新时间:2023-11-03 11:26:06 24 4
gpt4 key购买 nike

我有一个类似于下面的函数:

public void Increment()
{
if (Count == 0)
{
AttachResource();
}

Count++;
}

对我的代码的更改意味着将从多个线程调用此函数。由于 AttachResource() 的性质,此函数必须在主线程上运行。

假设我修改函数如下:

public void Increment()
{
_dispatcher.Invoke(new Action(() =>
{
if (Count == 0)
{
AttachResource();
}

Count++;
}));
}

我是否还需要在此代码中添加一个锁以确保线程互斥访问?还是通过调度程序的调用会通过将多个调用序列化到主线程来自然地完成此操作?

最佳答案

您的示例将防止 AttachResource 被多次调用,除非有其他东西重置 Count。

除此之外,假设 Dispatcher 是 UI 的调度程序实例(例如 Application.Current.Dispatcher),那么只有 UI 线程会从此代码路径调用 AttachResource。

关于c# - 使用 Dispatcher.Invoke/BeginInvoke 本身是否提供对一段代码的互斥访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9286844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com