如果有一个哈希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