Kimi API官方接入指南:合规调用与工程优化实践
2026/6/5 0:07:44
各类资料学习下载合集
链接:https://pan.quark.cn/s/770d9387db5f
在上一篇文章中,我们初步认识了读写锁(Read-Write Lock)“写独占,读共享”的特性,并了解了它在“读多写少”场景中的巨大优势。今天,我们将通过一个更具体的案例——3个写线程和5个读线程并发访问一个计数器——来进一步巩固读写锁的使用,并深入理解其背后的三大核心概念。
读写锁之所以高效且强大,源于其独特的工作机制。我们可以用三句话来概括:
实际运行表现:
熟练掌握读写锁的 API 是正确使用的前提。
| 函数原型 | 描述 |
|---|---|
int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr); | 初始化读写锁。rwlock指向读写锁对象,attr通常传NULL使用默认属性。restrict关键字用于编译器优化,表示该指针是访问其指向内存的唯一途径。 |
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock); | 销毁读写锁,释放其占用的资源。 |
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock); | 阻塞式获取读锁。如果当前有写锁被持有,调用线程会阻塞,直到获取到读锁。 |
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock); | 阻塞式获取写锁。如果当前有任何读锁或写锁被持有,调用线程会阻塞,直到获取到写锁。 |
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock); | 非阻塞式尝试获取读锁。如果锁不可用,立即返回EBUSY错误而不是阻塞。 |
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock); | 非阻塞式尝试获取写锁。如果锁不可用,立即返回EBUSY错误而不是阻塞。 |
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock); | 释放读写锁。该函数是通用的,不区分之前是读锁还是写锁。 |
rwlock_example_final.c)我们将创建一个全局计数器counter,并启动 3 个写线程对其进行++操作,以及 5 个读线程来读取counter的值。
#include<stdio.h>#include<pthread.h>#include<unistd.h>#include<stdlib.h>// For EXIT_FAILURE// 共享资源和读写锁intcounter=0;pthread_rwlock_trwlock;// 读线程函数void*th_read(void*arg){