如果一个哈希在 2 个线程之间共享,并且如果我确保 thread1
仅与 key1
交互,而 thread2
仅与 交互key2
,我可以假设它是线程安全的吗?如果是这样,我是否需要创建 key1
和 key2
才能在踏板上共享哈希,或者每个线程都可以创建自己的 key ?
有什么地方可以让我获得有关 Perl 哈希内部机制及其与线程的行为的一些信息?
最佳答案
散列是一个链表数组。散列函数将键转换为数字,该数字用作存储值的数组元素(“桶”)的索引。多个键可以散列到同一索引(“冲突”),因此链表可以处理这种情况。
如果一个线程修改其中一个链表(例如添加一个元素)而另一个线程正在导航它(例如获取一个元素),这可能会导致问题。
因此,添加元素是不安全的。您可以通过预先创建散列(或数组)的元素来解决这个问题。
因此留下了访问现有元素是否安全的问题。可能是,但不能保证。
您可能会发现这些很有趣:
- illguts进入 Perl 数据结构的内部细节。
- Devel::Peek是一个非常有用的工具。
关于multithreading - Perl 线程和散列键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7573288/