Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于读取的块变量_C#_Multithreading_Mutex - Fatal编程技术网

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?