我是新約的反應,但想法把我的好奇心,所以我做了一些有點反應變量,但我不知道這是否是最好的初步實踐,然後我就會把這個線程。使屬性線程安全c#信號量或鎖?
這裏的類:
公共類RxVar:的IObservable {
T _value; public T Value { get{ return _value; } set{ if (!_value.Equals(value)) { onChange(_value); _value = value; } } } event onValChange onChange = delegate { }; delegate void onValChange(T val); IObservable<T> _observable; public RxVar() { _observable = Observable.FromEvent<onValChange,T>(ev => onChange += ev, ev => onChange -= ev); } public IDisposable Subscribe(IObserver<T> observer) { return _observable.Subscribe(p=>observer.OnNext(p)); } }
信號燈例如
_semaphoreSlim.WaitOne(); if (!_value.Equals(value)) { onChange(_value); _value = value; } _semaphoreSlim.release();
好吧我想讓這個線程安全,並且我對死鎖感到恐慌,所以 使用lock或semaphone會更好,還是因爲不需要反應性本身?
謝謝。 :)
真的謝謝你,反正我不明白爲什麼semaphone不能做的工作:) – LXG
信號量是最適合於其他場景,如[生產者/消費者(http://en.wikipedia.org/wiki/監製%E2 %80%93consumer_problem)或[讀者/作者](http://en.wikipedia.org/wiki/Readers-writers_problem)。這種情況是一個簡單的[互斥](http://en.wikipedia.org/wiki/Mutex),因此可能有更清晰的代碼和更有效的實現。 – pid