如果有一個哈希2個線程之間,如果我保證thread1
只是key1
和thread2
只是key2
互動,我可以假設它是線程安全的共享?如果是這樣,我需要創建key1
和key2
之前分享散列或每個線程可以創建自己的密鑰? 有沒有什麼地方可以獲得關於Perl哈希內部機制以及線程行爲的一些信息?Perl的線程和哈希鍵
3
A
回答
2
散列是一個鏈接列表數組。散列函數將該鍵轉換爲一個數字,該數字用作存儲該值的數組元素(「存儲區」)的索引。多個鍵可以散列到相同的索引(「衝突」),所以鏈表處理這種情況。
如果一個線程修改其中一個鏈接列表(例如添加一個元素)而另一個鏈接列表正在導航(例如,獲取元素),則可能會導致問題。
因此,添加元素並不安全。您可以通過預先創建哈希(或數組)的元素來解決這個問題。
這樣就留下了訪問現有元素是否安全的問題。它可能是,但不能保證。
您可能會發現這些有趣的:
- illguts進入Perl數據結構的內部細節。
- Devel::Peek是一個非常有用的工具。
0
是的,只要不同的線程不跨越對方的鍵,你很好。我對數組使用了一個類似的想法(例如讓每個處理線程記錄它處理了多少個項目,以便記者線程可以每秒鐘從數組中增加條目並報告結果)。
相關問題
- 1. Perl:哈希中的Grep鍵
- 2. 參考哈希鍵的鏈哈希一個Perl哈希
- 3. Perl哈希哈希
- 4. Perl的哈希引用在線程
- 5. 默認哈希鍵在Perl
- 6. Perl unicode哈希鍵查找
- 7. 哈希哈希在Perl中
- 8. Perl的哈希
- 9. perl編程哈希回憶
- 10. 沒有鍵名的Perl哈希值
- 11. 由陣列確定的Perl哈希鍵
- 12. Perl的哈希鍵+值變量
- 13. Perl - 如何知道值的哈希鍵?
- 14. Perl哈希鍵的合法值
- 15. Perl中的隨機/隨機哈希鍵
- 16. Perl哈希和數組
- 17. perl哈希表和javascript var
- 18. 哈希在Perl
- 19. 哈希的Perl嵌套哈希
- 20. 哈希的Perl哈希問題
- 21. 哈希的Perl哈希問題
- 22. 哈希輸出的Perl哈希
- 23. 如何共享哈希散列在多線程的perl分享哈希散列
- 24. perl的 - 從哈希
- 25. 如何從Perl中刪除哈希鍵?
- 26. Perl中印第二級哈希鍵
- 27. Perl:哈希引用訪問鍵陣列
- 28. 如何替換Perl哈希鍵?
- 29. Perl按哈希值排序哈希
- 30. 哈希打印表哈希perl
哈希的內部結構應該比數組複雜一點。如果你確保每個數組開始一個固定的大小,我不會期望每個索引的個別操作出現問題,但是如果兩個或多個線程需要在「完全相同的時間」內擴展數組以適應新大小, Perl處理這個線程安全問題? – cirne100
是的,我有一個預先指定數量的線程('$ num_threads'),並且 - 在開始我的線程之前 - 用零填充長度爲$ num_threads的共享數組。然後,我將一個參數傳遞給每個處理線程,該線程是從0到'$ num_threads - 1'的一個(不同的)數字。 – 2011-09-27 19:23:46