gpt4 book ai didi

c# - 在C#中,如何在另一个方法执行时锁定方法的执行而没有自锁?

转载 作者:行者123 更新时间:2023-12-03 13:18:46 24 4
gpt4 key购买 nike

您好,我有两种处理相同数据的方法。方法LoadData()从文件加载/重新加载内存中的数据,很少调用它(仅在文件更新时)。方法GetData()从内存中获取数据,并且经常从许多不同的线程中调用它。

我想实现以下行为:

当开始执行LoadData()时,阻止尝试执行GetData()的新线程,然后等待直到当前正在执行GetData()的线程完成其执行,然后继续执行LoadData()并在完成时取消阻止这些线程。以前被封锁了。而已。

private Object _LoadDataLock;
public void LoadData()
lock (_LoadDataLock) {
{
// (1.) Block new executions of GetData();
// (2.) Wait threads currently executing GetData() to complete its execution.

// (3.) Do some work ..... Loading from files.

// (4.) Unblock blocked in (1.) threads.
}
}

public IDictionary GetData(string key1, string key2)
{
//Do something....
retrn data;
}

如何使用C#实现该行为?

谢谢。
伊万

最佳答案

对于ReaderWriterLock来说,这听起来是一个很好的例子,它允许一个作者但可以有多个读者。

private ReaderWriterLock _lock;

public void LoadData()
{
_lock.AcquireWriterLock();
try
{
// Do some work ..... Loading from files.
}
finally
{
_lock.ReleaseWriterLock()
}
}

public IDictionary GetData(string key1, string key2)
{
_lock.AcquireReaderLock();
try
{
//Do something....
return data;
}
finally
{
_lock.ReleaseReaderLock()
}
}

关于c# - 在C#中,如何在另一个方法执行时锁定方法的执行而没有自锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57946711/

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