2010-06-03 2 views
0

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

#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; 
} 

ответ

0

Это, вероятно, включать один или несколько вызовов на CreateThread

+0

но он принимает только один аргумент нить функции? –

Смежные вопросы