我希望在其中一个线程通过并完成某个任务后释放所有锁定的线程。让我发布一些关于我想做什么的示例代码。重要的是他们必须在第一个线程完成他的工作后一起通过。他们(休息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等,但我没有设法做到这一点,它们都是一个接一个地来。你有没有这样做过?或者你有蚂蚁的想法吗?我不想花更多的时间在上面。
答案 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秒内完成。现在我可以自定义我的代码了。