剛剛遇到一個程序,其中線程間共享變量使用+ =,因此+ =線程安全,即以原子方式執行添加和賦值?C#+ =線程安全嗎?
6
A
回答
7
不,它不是線程安全的,因爲它等同於:
int temp = orig + value;
orig = temp;
您可以使用Interlocked.Add
代替:
Interlocked.Add(ref orig, value);
1
你想
System.Threading.Interlocked.Add()
0
string s += "foo";
是
string s = s + "foo";
s
被讀取,然後重新分配。如果在這兩個動作之間s
的值被另一個線程改變,結果會不同,所以它不是線程安全的。
0
謝謝大家的快速回復。是的,+ =不是線程安全的並且驗證這個可以運行以下簡單程序。
int count = 0;
Parallel.For(0, 10000, i =>
{
count +=1; // not thread safe
});
Console.WriteLine(count);
相關問題
- 1. java線程安全:線程安全嗎?
- 2. Guava Table線程安全嗎?
- 3. C++流對象線程安全嗎?
- 4. C++標準庫線程安全嗎?
- 5. C socket API是線程安全的嗎?
- 6. 是C#中的CreateDirectory()線程安全嗎?
- 7. ANTLR3 C目標線程安全嗎?
- 8. C#此方法線程安全嗎?
- 9. openpyxl線程安全嗎?
- 10. 是sqlite.swift線程安全嗎?
- 11. std :: random_shuffle線程安全嗎?
- 12. SoapHttpClientProtocol線程安全嗎?
- 13. TMemIniFile線程安全嗎?
- 14. itertools線程安全嗎?
- 15. cocos2d isTouchEnabled線程安全嗎?
- 16. C#線程安全
- 17. Interop.Domino dll線程安全嗎?
- 18. PCRE pcre_exec線程安全嗎?
- 19. Poco :: Logger線程安全嗎?
- 20. Spring mongoTemplate線程安全嗎?
- 21. Lparallel.queue線程安全嗎?
- 22. BoxClient線程安全嗎?
- 23. EventHubClient.SendBatchAsync - 線程安全嗎?
- 24. .NET:JsonMediaTypeFormatter線程安全嗎?
- 25. multiset equal_range線程安全嗎?
- 26. pip線程安全嗎?
- 27. com.google.cloud.datastore.Datastore線程安全嗎?
- 28. WNetGetResourceInformation線程安全嗎?
- 29. qsort線程安全嗎?
- 30. work_queue線程安全嗎?
不,不是。它寫入一個變量。 –
不是。正在閱讀,正在進行添加,然後寫入變量。它不是原子的。 – Gray
自動增量需要互鎖以確保線程安全。 – RBarryYoung