【C语言手写并发容器】concurrent_vector & concurrent_queue

本文介绍了一种使用C语言实现的高性能并发容器,包括自动扩容的向量和队列。这些容器支持多线程安全操作,如push、pop等,并实现了自旋锁机制确保并发访问的一致性。

这是C语言手写高性能并发容器系列第一篇。由于在微软实习的任务一个月就做完了。故自己找点事情做。

没啥难的。只是用 C 自己写了大家都懂的一些机制。
自动扩容,支持并发访问。提供了如下的操作方法。

#pragma once
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
#define INIT_SIZE 4

typedef struct con_vector {
   
   
    void** data;
    size_t cap;
    size_t tail;
    pthread_spinlock_t lock;
}con_vector;

// constructor
con_vector* create_vector() {
   
   
    con_vector* ret = malloc(sizeof(con_vector));
    ret->cap = (1 << INIT_SIZE);
    ret->data = malloc(sizeof(void*) * ret->cap);
    ret->tail = 0;
    pthread_spin_init(&ret->lock, PTHREAD_PROCESS_PRIVATE);
    return ret;
}

// auto-expansion, DO NOT CALL MANNUALLY
void resize(con_vector* s) {
   
   
    s->cap <<= 1;
    void** old = s->data;
    s->data = malloc(sizeof(void*) * s->cap);
    memcpy(s->data, old, sizeof(void*) * s->tail);
    free(old);
}

// push an item to the back
void push_back(con_vector* s, void* val) {
   
   
    pthread_spin_lock(&s->lock);
    if(s->tail == s->cap) {
   
   
        resize(s)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值