gpt4 book ai didi

c# - 保护应用程序和后台代理之间共享的等存储数据

转载 作者:太空狗 更新时间:2023-10-29 21:35:28 26 4
gpt4 key购买 nike

根据 MSDN前台应用程序和后台代理之间通过隔离存储中的文件进行的通信应受互斥体保护。

我能找到的唯一一篇描述如何做到这一点的文章是 this one迪娜·贝瑞 (Dina Berry) 着。然而,她似乎只使用互斥锁保护读取,而不保护写入。

正确的做法是什么?

最佳答案

互斥量可以跨多个进程锁定。如果您正在运行需要独占访问资源的计划任务,这在 Windows Phone 中会很有用。为了跨进程锁定互斥锁,必须为互斥锁指定一个名称。

监视器只能在进程内锁定。

互斥量示例:

电话应用任务:

public class DatabaseService
{
private Mutex _mut=new Mutex("mutex control",false);
public void AddToDatabase(DbObject row)
{
mut.WaitOne();
SaveRow(row);
mut.ReleaseMutex();
}
}

计划任务类:

public class ResourceUtilisation
{
private Mutex _mut=new Mutex("mutex control",true);
//.. does stuff
private static void UseResource()
{
// Wait until it is safe to enter.
_mut.WaitOne();

//Go get dataabse and add some rows
DoStuff();

// Release the Mutex.
_mut.ReleaseMutex();
}
}

在上面的示例中,我们一次只允许一个应用程序访问本地数据库资源。这就是我们使用 Mutex 的原因。

监控示例(使用锁定语法):

电话应用任务:

public class DatabaseService
{
private object _locker=new object();
public void AddToDatabase(DbObject row)
{
lock(_locker)
SaveRow(row);
}
}

计划任务类:

public class ResourceUtilisation
{
private object _locker=new object();
//.. does stuff
private static void UseResource()
{

//Go get dataabse and add some rows
lock(_locker)
DoStuff();
}
}

在本例中,我们可以阻止多个应用程序线程进入 SaveRow,我们可以阻止多个 ScheduledTask 线程进入 DoStuff 方法。我们不能用 Monitor 做的是确保一次只有一个线程访问本地数据库。

这基本上就是区别。 Monitor 也比 Mutex 快得多。

关于c# - 保护应用程序和后台代理之间共享的等存储数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10181058/

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