我有以下情况:
首先,我创建了一个 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/