Никогда не безопасно читать / писать без забора памяти. Если вы не блокируете, вам нужно объявить переменную свойства как volatile или использовать ограничитель памяти. Сделайте поиск в блоге Джо Даффи для получения дополнительной информации.

аюсь создать потокобезопасные свойства в C #, и я хочу убедиться, что я нахожусь на правильном пути - вот что я сделал -

private readonly object AvgBuyPriceLocker = new object();
private double _AvgBuyPrice;
private double AvgBuyPrice 
{
    get
    {
        lock (AvgBuyPriceLocker)
        {
            return _AvgBuyPrice;
        }
    }
    set
    {
        lock (AvgBuyPriceLocker)
        {
            _AvgBuyPrice = value;
        }
    }
}

Читая эту публикацию, казалось бы, что это не правильный способ сделать это -

Безопасность потоков C # с get / set

Тем не менее, эта статья, кажется, предлагает иное,

http://www.codeproject.com/KB/cs/Synchronized.aspx

У кого-нибудь есть более точный ответ?

Редактировать:

Причина, по которой я хочу сделать Getter / Setter для этого свойства, заключается в том, что b / c я на самом деле хочу, чтобы оно запускало событие, когда оно установлено - поэтому код на самом деле был бы таким:

public class PLTracker
{

    public PLEvents Events;

    private readonly object AvgBuyPriceLocker = new object();
    private double _AvgBuyPrice;
    private double AvgBuyPrice 
    {
        get
        {
            lock (AvgBuyPriceLocker)
            {
                return _AvgBuyPrice;
            }
        }
        set
        {
            lock (AvgBuyPriceLocker)
            {
                Events.AvgBuyPriceUpdate(value);
                _AvgBuyPrice = value;
            }
        }
    }
}

public class PLEvents
{
    public delegate void PLUpdateHandler(double Update);
    public event PLUpdateHandler AvgBuyPriceUpdateListener;

    public void AvgBuyPriceUpdate(double AvgBuyPrice)
    {
        lock (this)
        {
            try
            {
                if (AvgBuyPriceUpdateListener!= null)
                {
                    AvgBuyPriceUpdateListener(AvgBuyPrice);
                }
                else
                {
                    throw new Exception("AvgBuyPriceUpdateListener is null");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

Я довольно новичок в том, чтобы сделать мой поток кода безопасным, поэтому, пожалуйста, не стесняйтесь сказать мне, если я поступаю об этом совершенно неправильно!

Будет

Ответы на вопрос(4)

Ваш ответ на вопрос