C 多线程链表操作
我有以下用于链表操作的代码段:C 多线程链表操作,c,C,我有以下用于链表操作的代码段: #define MPL_DL_APPEND_NP(head,add,_next,_prev) \ do { \ if (head) {
#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)
如果多线程同时更新此链表,是否存在任何问题?假设我的程序中有两个线程,每个线程需要将一个节点附加到此链接列表。可能的最终链接列表是什么 是的,有个问题。假设您有一个节点和两个线程 假设它们都准备好插入一个节点。哪一个先来?它们是与一个节点列表有关还是与两个节点列表有关。一般来说,你不知道会发生什么
在列表中的插入(所有线程都可以看到该列表)被称为关键部分,应该这样处理 当然有个问题。如果(头部)有可能
{
将对这两个线程执行,并且对于每个添加
,前面的将是当前的头
。现在您有一个定义不清的列表,更像是一棵树。是的,会有问题。如果您在同一内存空间中使用多个线程,那么在某个时刻您肯定会得到意外的结果。>
考虑使用并消除任何可能的争用条件。这到底是一个宏而不是一个函数吗?第一:添加反斜杠。第二:不要这样做。是的,那是反斜杠。这只是复制和粘贴问题。这部分代码在关键部分。出于性能原因,我必须将它放在宏中或作为内联函数。