gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:23:23 25 4
gpt4 key购买 nike

我有以下情况:

首先,我创建了一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com