Пример связанного списка с использованием потоков - PullRequest
0 голосов
/ 03 июня 2010

Я прочитал следующий код использования CRITICAL_SECTION при работе с несколькими потоками для расширения связанного списка. что будет частью main (), которая использует два потока для добавления в связанный список?

#include <windows.h>

typedef struct _Node
{
    struct _Node *next;
    int data;
} Node;

typedef struct _List
{
    Node *head;
    CRITICAL_SECTION critical_sec;
} List;

List *CreateList()
{
    List *pList = (List*)malloc(sizeof(pList));
    pList->head = NULL;
    InitializeCriticalSection(&pList->critical_sec);
    return pList;
}

void AddHead(List *pList, Node *node)
{
    EnterCriticalSection(&pList->critical_sec);
    node->next = pList->head;
    pList->head = node;
    LeaveCriticalSection(&pList->critical_sec);
}

void Insert(List *pList, Node *afterNode, Node *newNode)
{
    EnterCriticalSection(&pList->critical_sec);
    if (afterNode == NULL)
    {
        AddHead(pList, newNode);
    }
    else
    {
        newNode->next = afterNode->next;
        afterNode->next = newNode;
    }
    LeaveCriticalSection(&pList->critical_sec);
}

Node *Next(List *pList, Node *node)
{
    Node* next;
    EnterCriticalSection(&pList->critical_sec);
    next = node->next;
    LeaveCriticalSection(&pList->critical_sec);
    return next;
}

1 Ответ

0 голосов
/ 03 июня 2010

Вероятно, потребуется один или несколько вызовов CreateThread

...