微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

同步对双向链表的访问

我正在尝试在pthreads环境中实现C中的(特殊类型)双向链表,但是只使用C-wrapped同步指令,如原子CAS等,而不是pthread原语. (列表的元素是固定大小的内存块,几乎肯定不能适合pthread_mutex_t等.)我实际上并不需要完全任意的双向链表方法,只有:

>插入列表末尾
>从列表的开头删除
>根据指向要删除的成员的指针删除列表中的任意点,该指针是从遍历列表以外的源获取的.

因此,描述此数据结构的更好方法可能是队列/ fifo,可以删除队列中的项目.

是否有标准方法来同步这个?我遇到了可能出现的死锁问题,其中一些问题可能是所涉及的算法所固有的,其他问题可能源于这样一个事实,即我正试图在有限的空间内工作,并对我能做的事情有其他限制.

编辑:特别是,如果要同时删除相邻的对象,我会坚持做什么.大概在删除对象时,您需要获取列表中上一个和下一个对象的锁定,并更新它们的下一个/ prev指针以指向彼此.但是如果任何一个邻居已经被锁定,这将导致死锁.我试图找出一种方法,任何/所有发生的删除可以走在列表的锁定部分,并确定当前正在删除过程中的最大子列表,然后锁定该子列表旁边的节点,以便整个子列表整体被移除,但我的头开始受伤..

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐