Здравствуйте! Помогите, пожалуйста, с решением вот такой задачи:
Демонстрационная программа содержит: поток, инициализирующий структуру односвязного списка; поток(и) для добавления элемента в список; поток(и) для удаления элемента; поток(и) для записи в элемент; поток(и) для чтения содержимого элемента. В программе использовать функции ANSI-C для работы с кучей. Для работы с потоками использовать средства библиотеки pthread (объявлены в pthread.h). Обеспечить исключение возможности перекрытия операций со списком. Спроектировать, закодировать и отладить программу.
Для ее решения я написала вот такой код: (он компилируется без ошибок, проблема описана ниже)
| Код |
/* * main.c * * Created on: May 29, 2011 * Author: margot */ #include <stdio.h> #include <stdlib.h> #include <pthread.h> typedef struct node_t { int value; struct node_t *link; pthread_mutex_t lock; } node; node ListHead; node *delete(int value) { node *prev, *current; prev = &ListHead; pthread_mutex_lock(&prev->lock); while ((current = prev->link) != NULL) { pthread_mutex_lock(¤t->lock); if (current->value == value) { prev->link = current->link; pthread_mutex_unlock(¤t->lock); pthread_mutex_unlock(&prev->lock); current->link = NULL; return (current); } pthread_mutex_unlock(&prev->lock); prev = current; } pthread_mutex_unlock(&prev->lock); return (NULL); } node *add(int value) { node *prev, *current; current = (node*) malloc(sizeof(node)); current->value = value; current->link = NULL; prev = &ListHead; pthread_mutex_lock(&prev->lock); while ((prev = prev->link) != NULL) ; pthread_mutex_lock(&prev->lock); prev->link = current; pthread_mutex_unlock(&prev->lock); return (current); } node *fill(int value, int newvalue) { node *prev; prev = &ListHead; pthread_mutex_lock(&prev->lock); while ((prev = prev->link) != NULL) ; pthread_mutex_lock(&prev->lock); prev->value = newvalue; pthread_mutex_unlock(&prev->lock); return (prev); } void viewall() { node *prev, *current; prev = &ListHead; pthread_mutex_lock(&prev->lock); while ((current = prev->link) != NULL) { pthread_mutex_lock(&prev->lock); printf("%d ", current->value); pthread_mutex_unlock(&prev->lock); prev = current; } pthread_mutex_unlock(&prev->lock); } int main() { return 0; }
|
Однако, вот в чем проблема: я абсолютно (ну никак!) не понимаю, что же должно быть в main()'е, чтобы показать, что программа работает или не работает. Т.е. я понимаю, что необходимо воспользоваться pthread_create() и ей подобными, но не представляю как же все-таки происходит их чередование в памяти, что ли.
Подскажите, пожалуйста, что же все-таки туда написать, либо поделитесь, пожалуйста, ссылкой, где достаточно подробно объяснен этот процесс. |