我有以下用于链表操作的代码片段:
#define MPL_DL_APPEND_NP(head,add,_next,_prev) \
do { \
if (head) { \
(add)->_prev = (head)->_prev; \
(head)->_prev->_next = (add); \
(head)->_prev = (add); \
(add)->_next = NULL; \
} else { \
(head)=(add); \
(head)->_prev = (head); \
(head)->_next = NULL; \
} \
} while (0)
如果多个线程同时更新这个链表,有什么问题吗?假设我的程序中有两个线程,每个线程都需要向这个链表追加一个节点。最终可能的链表是什么?
最佳答案
当然有问题。可能会对两者执行 if(head) {
,并且对于每个 add
,前一个将是当前的 head
。现在你有一个定义不明确的列表,它更像是一棵树。
关于c - 多线程链表操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25858194/