位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > C# > 問(wèn)題詳情

同步的含義

提問(wèn)人:劉冬梅發(fā)布時(shí)間:2020-10-13

1.同步問(wèn)題的產(chǎn)生,主要是由于在高級(jí)語(yǔ)言的源代碼中,大多數(shù)情況下看起來(lái)是一條語(yǔ)句,但在最后編譯好的匯編語(yǔ)言機(jī)器碼中則會(huì)被翻譯為許多條語(yǔ)句,從而在操作系統(tǒng)調(diào)度時(shí)被劃分到不同的時(shí)間片中。

2.看看下面這個(gè)語(yǔ)句,假設(shè)message是一個(gè)string對(duì)象,已經(jīng)保存了一個(gè)字符串:

message += "Hello world!";

這條語(yǔ)句在C#語(yǔ)法上是一條語(yǔ)句,但在執(zhí)行代碼時(shí),實(shí)際上它涉及到許多操作。需要重新分配內(nèi)存以存儲(chǔ)更長(zhǎng)的新字符串,需要設(shè)置變量message使之指向新的內(nèi)存,需要復(fù)制實(shí)際文本等。顯然,這里選擇了一種復(fù)雜字符串,但即使在基本數(shù)字類型上執(zhí)行算術(shù)操作,后臺(tái)進(jìn)行的操作也比從C#代碼中看到的要多。而且,許多操作不能直接在存儲(chǔ)于內(nèi)存空間中的變量上進(jìn)行,它們的值必須單獨(dú)復(fù)制到處理器的特定位置上,即寄存器。只要一個(gè)C#語(yǔ)句翻譯為多個(gè)本機(jī)代碼命令,線程的時(shí)間片就有可能在執(zhí)行該語(yǔ)句的進(jìn)程中終止,如果是這樣,同一個(gè)進(jìn)程中的另一個(gè)線程就會(huì)獲得一個(gè)時(shí)間片,如果涉及到這條語(yǔ)句的變量訪問(wèn)(在上面的示例中,是message)不是同步的,那么另一個(gè)線程可能讀寫同一個(gè)變量。 


繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部