第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C# 中的靜態(tài)構造函數(shù)死鎖是否與 ECMA CLI 標準相矛盾?

C# 中的靜態(tài)構造函數(shù)死鎖是否與 ECMA CLI 標準相矛盾?

C#
泛舟湖上清波郎朗 2022-01-09 10:28:59
這是我感到困惑的標準部分:http : //www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf#page=178&zoom=auto,87,610%222.1。如果類型尚未初始化,請嘗試獲取初始化鎖。2.2.1。如果不成功,查看該線程或等待該線程完成的任何線程是否已經(jīng)持有鎖。2.2.2。如果是這樣,則返回,因為阻塞會造成死鎖。該線程現(xiàn)在將看到該類型的未完全初始化狀態(tài),但不會出現(xiàn)死鎖。以下代碼在我測試時出現(xiàn)死鎖,這似乎與標準相矛盾:public static class Foo {    static Foo() {        var otherThread = new Thread(() => { Thread.Sleep(1000); SomeFunction(); });        otherThread.Start();        otherThread.Join();    }    public static void SomeFunction() {    }}class Program {    static void Main() {        Foo.SomeFunction();    }}根據(jù)標準,我預計會發(fā)生以下情況:主線程獲取 Foo 的初始化鎖。主線程運行 Foo 的靜態(tài)構造函數(shù)。主線程創(chuàng)建 otherThread 并啟動它。otherThread 開始等待一秒鐘,從而確保第 5 點發(fā)生在第 6 點之前。主線程開始等待 otherThread 完成。otherThread 嘗試在 Foo 上獲取初始化鎖,但由于主線程持有鎖而失敗。otherThread 放棄執(zhí)行靜態(tài)構造函數(shù),因為主線程持有初始化鎖并等待 otherThread。otherThread 運行 SomeFunction 并成功完成。主線程返回。這里有什么問題?
查看完整描述

1 回答

?
慕田峪7331174

TA貢獻1828條經(jīng)驗 獲得超13個贊

“等待該線程完成的任何線程”是指使用靜態(tài)線程的初始化鎖等待的任何線程,而不是使用任何可能的同步機制等待的線程。靜態(tài)初始化機制無法知道其他線程正在等待另一個線程上使用一些完全不同的機制。


引用的部分是指以下示例不會死鎖的事實:


public class A

{

    static A()

    {

        Thread.Sleep(TimeSpan.FromSeconds(1));

        B.DoNothing();

    }

    public static void DoNothing() { }

}

public class B

{

    static B()

    {

        Thread.Sleep(TimeSpan.FromSeconds(1));

        A.DoNothing();

    }

    public static void DoNothing() { }

}

private static void Main()

{

    Task.Run(() => B.DoNothing());

    A.DoNothing();

}

這個例子沒有死鎖,因為一個線程正在等待另一個線程釋放靜態(tài)初始化器鎖,所以當該線程最終要求原始線程擁有的靜態(tài)初始化器鎖時,quoted 子句啟動并且它只是跳過鎖.


查看完整回答
反對 回復 2022-01-09
  • 1 回答
  • 0 關注
  • 151 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號