释放所有锁定的线程

时间:2017-11-27 22:13:41

标签: c# multithreading asynchronous synchronization

我希望在其中一个线程通过并完成某个任务后释放所有锁定的线程。让我发布一些关于我想做什么的示例代码。重要的是他们必须在第一个线程完成他的工作后一起通过。他们(休息99个主题)必须像他们从未锁定过的那样一个接一个地传递。

         Monitor.Enter(_lock);//imagine 100x threads hit this lock at same time.  
        //1 thread pass there
        if (data == null)
        {
            data = GetData();
        }

        Monitor.Exit(_locker);//one more thread allow after this code.And they all come one by one in order.In these point I want to release them all together.

我已经尝试过很多关于线程的类,比如Monitor,Mutex,Semaphore,ReadWriteLock,ManaualResetEvent等,但我没有设法做到这一点,它们都是一个接一个地来。你有没有这样做过?或者你有蚂蚁的想法吗?我不想花更多的时间在上面。

1 个答案:

答案 0 :(得分:-2)

public class ColorItem: INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged = delegate { };
        public Color color
        {
            get
            {
                return _color;
            }
            set
            {
                _color = value;
                this.OnPropertyChanged();
            }
        }

        public void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            // Raise the PropertyChanged event, passing the name of the property whose value has changed.
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

我可以像这样管理我想做的事情。在此代码示例中,10个线程命中等待。其中9人等待其他人继续前进。当1个线程完成他的工作时,其他9个线程不是一个接一个地。检查我是否将线程休眠和所有线程在6秒内完成,而不是在30秒内完成。现在我可以自定义我的代码了。