#include #include #include // 定义读写锁(需要 GNU99) pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER; // 静态初始化读写锁 void *read_task(void *data) { int *n = (int *)data; while (1) { pthread_rwlock_rdlock(&rwlock); // 申请读锁 rdlock printf("(%ld)线程读取 num: %d\n", pthread_self(), *n); pthread_rwlock_unlock(&rwlock); // 解锁 usleep(500 * 1000); } return NULL; } void *write_task(void *data) { int *n = (int *)data; while (1) { pthread_rwlock_wrlock(&rwlock); // 申请写锁 wrlock (*n)++; printf("(%ld) 线程写 num: %d\n", pthread_self(), *n); pthread_rwlock_unlock(&rwlock); // 解锁 sleep(2); } return NULL; } int main(int argc, char const *argv[]) { int num; // 公共资源 pthread_t t1, t2, t3; pthread_create(&t1, NULL, read_task, &num); pthread_create(&t2, NULL, read_task, &num); pthread_create(&t3, NULL, write_task, &num); pthread_join(t1, NULL); pthread_join(t2, NULL); pthread_join(t3, NULL); pthread_rwlock_destroy(&rwlock); // 销毁读写锁 return 0; }