我正在尝试在pthreads环境中实现C中的(特殊类型)双向链表,但是只使用C-wrapped同步指令,如原子CAS等,而不是pthread原语. (列表的元素是固定大小的内存块,几乎肯定不能适合pthread_mutex_t等.)我实际上并不需要完全任意的双向链表方法,只有:
>插入列表末尾
>从列表的开头删除
>根据指向要删除的成员的指针删除列表中的任意点,该指针是从遍历列表以外的源获取的.
因此,描述此数据结构的更好方法可能是队列/ fifo,可以删除队列中的项目.
是否有标准方法来同步这个?我遇到了可能出现的死锁问题,其中一些问题可能是所涉及的算法所固有的,其他问题可能源于这样一个事实,即我正试图在有限的空间内工作,并对我能做的事情有其他限制.
编辑:特别是,如果要同时删除相邻的对象,我会坚持做什么.大概在删除对象时,您需要获取列表中上一个和下一个对象的锁定,并更新它们的下一个/ prev指针以指向彼此.但是如果任何一个邻居已经被锁定,这将导致死锁.我试图找出一种方法,任何/所有发生的删除可以走在列表的锁定部分,并确定当前正在删除过程中的最大子列表,然后锁定该子列表旁边的节点,以便整个子列表整体被移除,但我的头开始受伤..