我对多线程和同步非常不熟悉,我必须将信号量代码添加到给定的伪代码中,这将允许多个线程以最大并发性访问线程二进制树。
pesudocode给出了包含以下内容的节点结构:
int data
node *leftchild, *rightchild, *prev, *next;
并且唯一的函数是insert(node *root, int data)
,它搜索当前树中的父节点,然后插入新节点(假设它已经不在树中)并更改{{1 }和prev
指针。
我不确定如何最好地实现信号量。我最初的想法是:
然后插入:
还有更好的方法吗? (假设它首先是正确的)
答案 0 :(得分:-1)
在这种情况下,您应该使用读写锁。如果您以后决定切换树实现并且需要更多工作,那么锁定单个节点或树的某些部分将变得异常困难。
int32_t Tree_insert(Tree *tree, int32_t data) {
pthread_rwlock_wrlock(&tree->rwlock);
int32_t ret = insert(&tree->root_node, data);
pthread_rwlock_unlock(&tree->rwlock);
return ret;
}