本文主要是介绍pthread_rwlock_t 使用demo,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#include <pthread.h>
#include <stdio.h>
#include <time.h> // for nanosleep// ...// 定义读写锁
pthread_rwlock_t rwlock;void* reader(void* arg) {while (1) {pthread_rwlock_rdlock(&rwlock);printf("Reader %ld reading...\n", (long)arg);pthread_rwlock_unlock(&rwlock);struct timespec sleepTime;sleepTime.tv_sec = 0;sleepTime.tv_nsec = 500000000; // 500 millisecondsnanosleep(&sleepTime, NULL);}
}void* writer(void* arg) {while (1) {pthread_rwlock_wrlock(&rwlock);printf("Writer %ld writing...\n", (long)arg);pthread_rwlock_unlock(&rwlock);struct timespec sleepTime;sleepTime.tv_sec = 1; // 1 secondsleepTime.tv_nsec = 0;nanosleep(&sleepTime, NULL);}
}int main() {pthread_t readers[3], writers[2];// 初始化读写锁pthread_rwlock_init(&rwlock, NULL);// 创建读者线程for (long i = 0; i < 3; ++i) {pthread_create(&readers[i], NULL, reader, (void*)i);}// 创建写者线程for (long i = 0; i < 2; ++i) {pthread_create(&writers[i], NULL, writer, (void*)i);}// 等待线程结束for (long i = 0; i < 3; ++i) {pthread_join(readers[i], NULL);}for (long i = 0; i < 2; ++i) {pthread_join(writers[i], NULL);}// 销毁读写锁pthread_rwlock_destroy(&rwlock);return 0;
}
cmake_minimum_required(VERSION 3.12)
project(ThreadExample)# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)# 添加可执行文件
add_executable(ThreadExample rwlock.cpp)# 查找线程库
find_package(Threads REQUIRED)# 链接线程库
target_link_libraries(ThreadExample PRIVATE Threads::Threads)
这篇关于pthread_rwlock_t 使用demo的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!