c - 多线程链表操作

标签 c

我有以下用于链表操作的代码片段:

#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/

相关文章:

c - 函数原型(prototype)应该总是在它的头文件中吗?

c - 学习c从strtok中获取位置指针作为int

c++ - 为什么要先编译成目标文件?

c - 在 C 语言中创建测量两点之间距离的程序时遇到问题

c - 如果为零则赋值的简写,例如 c = str[i] || 'x'

c - C 中的动态数组

你能解释一下这个例子中的频率数组逻辑吗?

c - 用CGI C程序保存文件到www目录

c - 在 C 中返回二维数组

c - 关于c中的二进制搜索算法的问题