3 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊
列表本身是線程安全的。在CPython中,GIL可以防止對(duì)它們進(jìn)行并發(fā)訪問(wèn),而其他實(shí)現(xiàn)則會(huì)為其列表實(shí)現(xiàn)使用細(xì)粒度鎖或同步數(shù)據(jù)類型。但是,雖然列表本身不會(huì)因同時(shí)訪問(wèn)的嘗試而損壞,但列表的數(shù)據(jù)不受保護(hù)。例如:
L[0] += 1
如果另一個(gè)線程執(zhí)行相同的操作,則不保證實(shí)際將L [0]增加1,因?yàn)?code>+=它不是原子操作。(非常,很少有Python中的操作實(shí)際上是原子的,因?yàn)樗鼈冎械拇蠖鄶?shù)都可以導(dǎo)致調(diào)用任意Python代碼。)您應(yīng)該使用隊(duì)列,因?yàn)槿绻皇褂貌皇鼙Wo(hù)的列表,您可能會(huì)因?yàn)榉N族而獲取或刪除錯(cuò)誤的項(xiàng)目條件。

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
為了澄清托馬斯的優(yōu)秀答案中的一點(diǎn),應(yīng)該提到的append()
是線程安全。
這是因?yàn)橐坏┪覀?em>寫入數(shù)據(jù),就不會(huì)擔(dān)心被讀取的數(shù)據(jù)會(huì)在同一個(gè)地方。該操作不讀取數(shù)據(jù),只將數(shù)據(jù)寫入列表。append()

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊
這是一個(gè)全面但非詳盡的list
操作示例列表,以及它們是否是線程安全的。希望能得到關(guān)于答案obj in a_list
的語(yǔ)言結(jié)構(gòu)在這里。
添加回答
舉報(bào)