常见并发与系统设计
收集一些常用结构设计
并发设计
并发工具
信号量
sem_t s;
/*
shared : 0 进程内
value: 可用资源数量
*/
int sem_init(sem_t* s, int shared, unsigned int value);
int sem_destroy(sem_t* s);
// 等待资源,等到后可用资源数目减一
int sem_wait(sem_t* s);
// 释放资源,可用资源数目加一 (即使初始化时 value为0,调用sem_post后,可用资源也会增加)
int sem_post(sem_t* s);
锁
pthread_mutex_t lock;
// attr 一般填NULL
int pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutexattr_t *restrict attr);
int pthread_mutex_destroy(pthread_mutex_t* mutex);
int pthread_mutex_lock(pthread_mutex_t* mutex);
int pthread_mutex_unlock(pthread_mutex_t* mutex);
条件变量
pthread_cond_t lock;
// cattr一般为NULL
int pthread_cond_init(pthread_cond_t* cond, const pthread_condattr_t *cattr);
int pthread_cond_destroy(pthread_cond_t* cond);
int pthread_cond_wait(pthread_cond_t* cond, pthread_mutex_t* mutex);
int pthread_cond_signal(pthread_cond_t* cond);
int pthread_cond_broadcast(pthread_cond_t* cond);
pthread_join
int pthread_create(pthread_t*, NULL, thread_func, NULL);
int pthread_join(pthread_t*)
更多阅读
系统设计
LRU
SkipList
1206. 设计跳表
Go 实现 Skip List(跳表)
LFU
Map
706. 设计哈希映射
HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你!