#include #include #include #include #include #include #define READMAX 200 #define WRITEMAX 50 int num = 0; void* read_num(void* arg); void* write_num(void* arg); pthread_rwlock_t rwlock; int main(int argc, char const *argv[]) { pthread_t t1[5], t2[3]; pthread_rwlock_init(&rwlock, NULL); // 创建5个读线程 for (size_t i = 0; i < 5; i++) { pthread_create(&t1[i], NULL, read_num, NULL); } // 创建3个写线程 for (size_t i = 0; i < 3; i++) { pthread_create(&t2[i], NULL, write_num, NULL); } // 线程回收 for (size_t i = 0; i < 5; i++) { pthread_join(t1[i], NULL); } for (size_t i = 0; i < 3; i++) { pthread_join(t2[i], NULL); } pthread_rwlock_destroy(&rwlock); return 0; } void* read_num(void* arg){ int count = 0; for (size_t i = 0; i < READMAX; i++) { pthread_rwlock_rdlock(&rwlock); printf("Read Thread id = %lu, num = %d ...... %d\n", pthread_self(), num, count++); pthread_rwlock_unlock(&rwlock); usleep(rand()%5); } return NULL; } void* write_num(void* arg){ int count = 0; for (size_t i = 0; i < WRITEMAX; i++) { pthread_rwlock_wrlock(&rwlock); int cur = num; cur++; num = cur; printf("Write Thread id = %lu, num=%d ...... %d\n", pthread_self(), num, count++); pthread_rwlock_unlock(&rwlock); usleep(500); } return NULL; }