c++ 编写一个线程安全的双向链表,要代码!

2025-12-17 21:15:45
推荐回答(1个)
回答1:

#include
#include
#include

struct dllist {
int number;
struct dllist *next;
struct dllist *prev;
};

CCriticalSection mysec;

struct dllist *head, *tail;

void initial_node(struct dllist *lnode);
void append_node(struct dllist *lnode);
void insert_node(struct dllist *lnode, struct dllist *after);
void remove_node(struct dllist *lnode);

int main(void) {

struct dllist *lnode;
int i = 0;

/* add some numbers to the double linked list */
for(i = 0; i <= 5; i++) {
lnode = (struct dllist *)malloc(sizeof(struct dllist));
lnode->number = i;
append_node(lnode);
}

/* print the dll list */
for(lnode = head; lnode != NULL; lnode = lnode->next) {
printf("%d\n", lnode->number);
}

/* destroy the dll list */
while(head != NULL)
remove_node(head);

return 0;
}

void append_node(struct dllist *lnode) {
if(head == NULL) {
head = lnode;
lnode->prev = NULL;
} else {
tail->next = lnode;
lnode->prev = tail;
}

tail = lnode;
lnode->next = NULL;
}

void insert_node(struct dllist *lnode, struct dllist *after) {
lnode->next = after->next;
lnode->prev = after;

if(after->next != NULL)
after->next->prev = lnode;
else
tail = lnode;

after->next = lnode;
}

void remove_node(struct dllist *lnode) {
if(lnode->prev == NULL)
head = lnode->next;
else
lnode->prev->next = lnode->next;

if(lnode->next == NULL)
tail = lnode->prev;
else
lnode->next->prev = lnode->prev;
}

void initial_node(struct dllist *lnode) {

mysec.Lock();
//临界区锁定,进行数据处理
head = tail = NULL;

mysec.Unlock();//处理后接触临界区的锁定

}