gpt4 book ai didi

c# - Lock 语句 c# 中使用的变量值是否发生变化?

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:09 25 4
gpt4 key购买 nike

   public Response Delete(Request fRequest)
{
Response fResponse = new Response();
try
{

foreach (Record rec in fRequest.Records)
{
string personid = rec.PersonId;
int recordId = rec.RecordId;

EnrollRecord record = (from lst in listEnrolledCandidates
where lst.PersonId == personid && lst.RecordId == recordId
select lst).FirstOrDefault();
lock (lockDelete)
{
listEnrolledCandidates.Remove(record);

int aIndex = record.ArraryIndex;
pvTemplatesArrayList.RemoveAt(aIndex)

}
}

return fResponse;

}
catch (Exception ex)
{


return null;
}

}

在上面的源代码中,锁定是保留在 Remove 语句上的。这意味着一次只有一个线程可以执行这三行代码。现在,如果一个线程(比如“A”)正在执行这 3 行,而另一个线程(比如“B”)使用另一个请求参数调用“Delete”方法,线程 A 是否有可能在执行时获取 EnrollRecord、personid 和 recordid 的更新值作为 Request 对象的操作是不同的?

最佳答案

我认为“personId”和“recordId”的值不会根据每个线程的执行而改变(这假设 fRequest 参数对每个线程都是唯一的)

但是,'record' 可能会发生奇怪的事情。未更改值,但线程 A 获取其值,然后线程 B 从列表中删除该值,因此它实际上不再存在。

任何“全局”或共享变量都需要在多线程情况下同步访问。

我会将列表访问权限移到锁内。

关于c# - Lock 语句 c# 中使用的变量值是否发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15470824/

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