C# 用于读取的块变量
我有以下代码:C# 用于读取的块变量,c#,multithreading,mutex,C#,Multithreading,Mutex,我有以下代码: private DateTime lastUploadActivityTime = DateTime.Now; private void HttpSendProgress(object sender, HttpProgressEventArgs e) { // update variable lastUploadActivityTime = DateTime.Now; ...... boolThreadAvailableTargetSiteActi
private DateTime lastUploadActivityTime = DateTime.Now;
private void HttpSendProgress(object sender, HttpProgressEventArgs e)
{
// update variable
lastUploadActivityTime = DateTime.Now;
......
boolThreadAvailableTargetSiteActive = false;
}
// this method is executed in different thread, than method above
private void ThreadCheckAvailableTargetSite()
{
while (boolThreadAvailableTargetSiteActive)
{
if (lastUploadActivityTime.AddSeconds(5) <= DateTime.Now)
{
MessageBox.Show("BREAK");
boolThreadAvailableTargetSiteActive = false;
}
Thread.Sleep(500);
}
}
private DateTime lastUploadActivityTime=DateTime.Now;
私有无效HttpSendProgress(对象发送方,HttpProgressEventArgs e)
{
//更新变量
lastUploadActivityTime=DateTime.Now;
......
boolthreadavaailabletargetsiteactive=false;
}
//与上述方法不同,此方法在不同的线程中执行
私有void ThreadCheckAvailableTargetSite()
{
while(boolthreadavaailabletargetsiteactive)
{
如果(lastUploadActivityTime.AddSeconds(5)互斥锁过多,请在这两种方法中使用锁来同步读取
关键字lock
确保一个线程不进入关键代码段,而另一个线程处于关键代码段。如果另一个线程尝试输入锁定的代码,它将等待、阻止,直到对象释放。最佳做法是定义要锁定的私有对象,或定义要锁定的私有静态对象变量检测所有实例共用的数据
private object syncLock = new object();
private DateTime lastUploadActivityTime = DateTime.Now;
private void HttpSendProgress(object sender, HttpProgressEventArgs e)
{
// update variable
lock (syncLock)
{
lastUploadActivityTime = DateTime.Now;
}
}
// this method is executed in different thread, than method above
private void ThreadCheckAvailableTargetSite()
{
while (boolThreadAvailableTargetSiteActive)
{
lock (syncLock)
{
if (lastUploadActivityTime.AddSeconds(5) <= DateTime.Now)
{
MessageBox.Show("BREAK");
boolThreadAvailableTargetSiteActive = false;
}
}
Thread.Sleep(500);
}
}
private object syncLock=new object();
private DateTime lastUploadActivityTime=DateTime.Now;
私有无效HttpSendProgress(对象发送方,HttpProgressEventArgs e)
{
//更新变量
锁定(同步锁定)
{
lastUploadActivityTime=DateTime.Now;
}
}
//与上述方法不同,此方法在不同的线程中执行
私有void ThreadCheckAvailableTargetSite()
{
while(boolthreadavaailabletargetsiteactive)
{
锁定(同步锁定)
{
如果(lastUploadActivityTime.AddSeconds(5)我已编辑了您的标题。请参阅“”,其中一致意见是“否,他们不应该”。锁变量应为引用类型:)lock关键字确保一个线程不进入关键代码段,而另一个线程处于关键代码段。如果另一个线程尝试输入锁定的代码,它将等待、阻止,直到对象被释放。请澄清变量未锁定,而是代码区域,并且有必要标识所有代码区域可以读取变量并锁定它们的变量,因此使用属性访问这些变量的值。此外,我是否应该将BooltReadAvailableTagetSiteActive声明为私有易失性bool BooltReadAvailableTagetSiteActive=true?