c - Peterson的线程链表算法(C语言)

标签 c multithreading algorithm mutual-exclusion

我有以下情况:

首先,我创建了一个 int 链表(已经可以工作了,没有问题),我需要执行以下任务:

使用 2 个线程,一个线程将删除我的列表的第一个元素,然后同一个线程必须在列表的末尾添加一个新元素(列表遵循 FIFO 结构)。

第二个线程将执行相同的操作:删除第一个元素并在列表末尾添加另一个元素。

我需要多次执行此操作,这显然是通过使用循环完成的。

当我创建一个线程时,我使用以下函数:

for(i=0, i<NUM_THREADS; i++)
    pthread_create (&thread[i], NULL, threadBody, (void *) i);

其中 NUM_THREADS 是一个包含我将使用的线程数(在本例中为 2)的变量,线程声明为:

pthread_t thread [NUM_THREADS] ;

所以,我的问题是:

我是否需要在我的 threadBody 函数上执行我之前提到的操作(添加和删除我的列表中的元素),否则这个函数将为空?

如果我的 threadBody 函数不打算执行此操作,我该如何使用我创建的线程来执行这些操作?是使用pthread_join函数完成的吗?

另一点是我需要使用彼得森算法来保证互斥。我该怎么做?

最佳答案

我看你对链表的操作很简单。在这种情况下,也许使用无锁编程会更好。要阅读,请查看此 link .如果您使用的是 GCC,请查看 __sync_bool_compare_and_swap 操作 ( link )。最后,无锁链表的编程问题得到了广泛的研究。下一个链接可能会给您一些提示 link .祝你好运!

关于c - Peterson的线程链表算法(C语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29638800/

相关文章:

iphone - 使用线程解决第三方 iphone 库中的内存泄漏问题

c - 释放 void 指针数组的元素

c - 与 strcpy 一起使用时出现段错误(核心转储)

c - 为什么我得到 0 而不是 C 中计算 x - y 和 x/y 的结果

算法:添加新元素时如何找到集合的子集?

php - 具有业力的加权投票系统

python - 最大小费计算器 - 天真的解决方案

c - 图映射资源信号量

c - 为什么我的程序在调用 sem_wait 时不等待?

c++ - 为什么线程创建方法需要一个参数?