有一个目标是创建支持任务优先级的线程池。因此,我需要编写一些数据结构来支持线程安全的优先级队列。当然,我们可以编写大锁并使用std::priority_queue。但这不是很有效率。
曾经有一个想法是实现带有并发提取的二叉堆(每个元素都有自己的自旋锁,并且有一个全局的shared_mutex,在更改堆大小时进行写锁定,在堆化节点时进行读锁定,并且在交换和比较节点时锁定它们的自旋锁),但存在许多潜在的死锁可能性,我仍然不知道如何避免它们。
是否有任何良好的数据结构可以更容易地实现线程安全?或者是否有任何已经实现的堆可以调查?
曾经有一个想法是实现带有并发提取的二叉堆(每个元素都有自己的自旋锁,并且有一个全局的shared_mutex,在更改堆大小时进行写锁定,在堆化节点时进行读锁定,并且在交换和比较节点时锁定它们的自旋锁),但存在许多潜在的死锁可能性,我仍然不知道如何避免它们。
是否有任何良好的数据结构可以更容易地实现线程安全?或者是否有任何已经实现的堆可以调查?