这是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)

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

1541

被折叠的 条评论
为什么被折叠?



