如果有一個哈希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哈希鍵
- 7. Perl哈希和數組
- 8. 哈希在Perl
- 9. 哈希的Perl嵌套哈希
- 10. 哈希的Perl哈希問題
- 11. 哈希的Perl哈希問題
- 12. perl的 - 從哈希
- 13. 如何替換Perl哈希鍵?
- 14. Perl中印第二級哈希鍵
- 15. 哈希打印表哈希perl
- 16. Perl中的哈希和哈希引用有什麼區別?
- 17. 使用Perl哈希
- 18. 引用Perl哈希
- 19. Perl:哈希和正則表達式中的鍵問題
- 20. Perl中的哈希常量
- 21. Perl的哈希使用
- 22. 嵌套哈希排序哈希鍵
- 23. Perl哈希對同一哈希值內的哈希值的引用
- 24. Perl - 處理多線程時出列哈希值
- 25. 在Perl中使用哈希和數組
- 26. Perl哈希和數組+排序
- 27. 排序的哈希值的Perl值哈希
- 28. Perl哈希到oauth簽名
- 29. Perl,使用哈希「閉包」
- 30. Perl哈希陣列大小
哈希的內部結構應該比數組複雜一點。如果你確保每個數組開始一個固定的大小,我不會期望每個索引的個別操作出現問題,但是如果兩個或多個線程需要在「完全相同的時間」內擴展數組以適應新大小, Perl處理這個線程安全問題? – cirne100
是的,我有一個預先指定數量的線程('$ num_threads'),並且 - 在開始我的線程之前 - 用零填充長度爲$ num_threads的共享數組。然後,我將一個參數傳遞給每個處理線程,該線程是從0到'$ num_threads - 1'的一個(不同的)數字。 – 2011-09-27 19:23:46