Windows API实现的栈及使用(支持线程安全,以原子方式操作)

8 篇文章 0 订阅

InitializeSListHead:创建一个空栈。

InterlockedPushEntrySList:在栈顶添加一个元素。

InterlockedPopEntrySList:移除位于栈顶的元素并将它返回。

InterlockedFlushSList:清空栈。

QueryDepthSList:返回栈中元素的数量。


使用方法:

#include <windows.h>
#include <malloc.h>

// Structure to be used for a list item. Typically, the first member 
// is of type SINGLE_LIST_ENTRY. Additional members are used for data. 
// Here, the data is simply a signature for testing purposes. 

typedef struct _PROGRAM_ITEM {
    SINGLE_LIST_ENTRY ItemEntry;
    ULONG Signature; 
} PROGRAM_ITEM, *PPROGRAM_ITEM;

void main( )
{
    ULONG Count;
    PSINGLE_LIST_ENTRY FirstEntry, ListEntry;
    SLIST_HEADER ListHead;
    PPROGRAM_ITEM ProgramItem;

    // Initialize the list header.
    InitializeSListHead(&ListHead);

    // Insert 10 items into the list.
    for( Count = 1; Count <= 10; Count += 1 )
    {
        ProgramItem = (PPROGRAM_ITEM)malloc(sizeof(*ProgramItem));
        ProgramItem->Signature = Count;
        FirstEntry = InterlockedPushEntrySList(&ListHead, 
                       &ProgramItem->ItemEntry); 
    }

    // Remove 10 items from the list.
    for( Count = 10; Count >= 1; Count -= 1 )
    {
        ListEntry = InterlockedPopEntrySList(&ListHead);
    }

    // Flush the list and verify that the items are gone.
    ListEntry = InterlockedFlushSList(&ListHead);
    FirstEntry = InterlockedPopEntrySList(&ListHead);
    if (FirstEntry != NULL)
    {
        // Error - list is not empty.
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值