首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >powershell类中的ThreadStatic

powershell类中的ThreadStatic
EN

Stack Overflow用户
提问于 2019-05-09 20:33:20
回答 1查看 74关注 0票数 0

我试图在powershell singelton类中使用ThreadStaticAttribute为每个线程创建一个新的对象实例,但不起作用。

代码语言:javascript
复制
class log {
    [ThreadStaticAttribute()]
    static [log] $logging;
    log(){
    }
     static [log]GetInstance(){
        if($null -eq [log]::logging){
            [log]::logging=[log]::New()         
        }
        return [log]::logging
    }
}

这将为新创建的线程返回相同的对象,而不是实例化新的线程。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2019-05-10 00:51:50

我没有理由去尝试这个方法,但是很久以前我确实想到了它。我用来处理它的资源是下面的,但同样,我从来没有真正做到这一点,因为事情发生了变化,没有理由这样做。

ThreadStatic Attribute

ThreadStaticattribute表示变量的每个线程都有一个实例。这是静态变量的变体。

在程序的整个生命周期中,静态变量只有一个实例。标记为ThreadStatichas的变量,程序中的每个线程一个实例。

有关更多详细信息,请参阅示例。

代码语言:javascript
复制
class Program 
{
    public static Int32 singleton = 0;

    [ThreadStatic]

    public static Int32 threadSingleton = 0;

    static void Main(string[] args)
    {
        Program executingProgram = new Program();
        Thread firstThread = new Thread(new ThreadStart(executingProgram.FirstThread));
        Thread secondThread = new Thread(new ThreadStart(executingProgram.SecondThread));
        firstThread.Start();
        firstThread.Join();
        secondThread.Start();
        firstThread.Join(); 
        Console.Read();
    }

    public void FirstThread()
    {
        singleton++;
        threadSingleton++;
        Console.WriteLine("Singleton = {0} ThreadSingleton = {1}", singleton.ToString(), threadSingleton.ToString());
    }

    public void SecondThread()
    {
        singleton++;
        threadSingleton++;
        Console.WriteLine("Singleton = {0} ThreadSingleton = {1}", singleton.ToString(), threadSingleton.ToString());
    } 
}

# Output
Singleton = 1 ThreadSingleton = 1
Singleton = 2 ThreadSingleton = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56059551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档