相关疑难解决方法(0)

C#中的线程安全属性

我正在尝试在C#中创建线程安全属性,我想确保我在正确的路径上 - 这就是我所做的 -

private readonly object AvgBuyPriceLocker = new object();
private double _AvgBuyPrice;
private double AvgBuyPrice 
{
    get
    {
        lock (AvgBuyPriceLocker)
        {
            return _AvgBuyPrice;
        }
    }
    set
    {
        lock (AvgBuyPriceLocker)
        {
            _AvgBuyPrice = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

阅读这篇文章,似乎这不是正确的做法 -

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 …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading properties thread-safety

34
推荐指数
4
解决办法
4万
查看次数

为什么使用私有成员然后使用公共属性来设置它们?

看到发生这种情况的一些代码示例:

public class Foo
{
    string[] m_workID;
    public string[] WorkID
    {
        get
        {
            return m_workID;
        }
        private set
        {
            m_workID = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这有什么意义?由于使用m_workID不必要.

c#

20
推荐指数
2
解决办法
2301
查看次数

使UnityContainer不是线程安全的陷阱是什么?

我正在向我的库添加依赖注入,我使用Unity.我想知道我是否需要采取一些额外的步骤来使Unity Container成为线程安全的.我找到了几篇关于线程安全容器的文章(例如:http://www.fascinatedwithsoftware.com/blog/post/2012/01/04/A-Thread-Safe-Global-Unity-Container.aspx)但我不明白我的项目是否真的需要它.从一方面来看,我不希望由于来自另一方的竞争条件而产生一些令人讨厌的错误,我不知道在什么情况下会出现竞争条件.我想使用Unity与Composition Root模式并在静态构造函数中注册所有类型:

internal static class ConfiguredUnityContainer
    {
        private static readonly UnityContainer Container = new UnityContainer();

        static ConfiguredUnityContainer()
        {
            Container.RegisterType<IConnectionFactory<SqlConnection>>();
        }

        public static T Resolve<T>()
        {
            return Container.Resolve<T>();
        }
    }
Run Code Online (Sandbox Code Playgroud)

所以,基本上我的问题是:在我使用Unity DI时,在什么情况下我还需要额外的线程安全?我在哪里可以获得竞争条件或线程安全问题?

c# dependency-injection unity-container

5
推荐指数
1
解决办法
3298
查看次数