C 当内存被一个线程修改而被其他线程读取时,使用pthread和mutex锁保护内存的最佳方法是什么?

C 当内存被一个线程修改而被其他线程读取时,使用pthread和mutex锁保护内存的最佳方法是什么?,c,multithreading,pthreads,mutex,C,Multithreading,Pthreads,Mutex,我正在编写一个程序,其中一个线程在两种可能的操作下修改一个内存数组(修改数组内容,或解除数组锁定并通过分配一个新数组来替换它)。内存阵列可以由多个线程读取,除非在修改、取消分配和替换阵列时 我知道如何使用互斥锁来允许内存在任何时候只被一个线程修改。如何使用它(或c中的其他多线程工具)允许任意数量的读线程访问内存,除非写线程修改内存 实现这一点的最佳解决方案是使用读写锁,即pthread_rwlock,正如上面的评论中已经回答的那样。提供更多关于它的细节 读写锁用于共享读访问或独占写访问。当任何线

我正在编写一个程序,其中一个线程在两种可能的操作下修改一个内存数组(修改数组内容,或解除数组锁定并通过分配一个新数组来替换它)。内存阵列可以由多个线程读取,除非在修改、取消分配和替换阵列时


我知道如何使用互斥锁来允许内存在任何时候只被一个线程修改。如何使用它(或c中的其他多线程工具)允许任意数量的读线程访问内存,除非写线程修改内存

实现这一点的最佳解决方案是使用读写锁,即pthread_rwlock,正如上面的评论中已经回答的那样。提供更多关于它的细节

读写锁用于共享读访问或独占写访问。当任何线程当前具有写访问权限时,需要读取访问权限的线程无法继续。当任何其他线程具有写访问权限或读访问权限时,需要写访问权限的线程无法继续。当读卡器和写卡器同时等待访问时,有一个默认操作为它们中的任何一个赋予优先级,可以更改此规则

这里对带参数的读写锁函数进行了详细说明:

stackoverflow本身也有一个帖子,内容大致相同:

如果没有正确定义优先级,并且实现没有考虑太多读卡器等待writer完成时的情况,那么这种(读写锁)可能会导致writer线程耗尽。因此,也请阅读以下内容:

您可能对
pthread\u rwlock\u init
pthread\u rwlock\u rwlock
pthread\u rwlock\u rdlock
感兴趣!在哪里可以找到使用repthread\u rwlock\u wrlock的好教程/示例?我想到了使用信号量。。它们可用于限制线程对数据结构的访问(即,您有一个工作线程池,但一次只需要5个工作线程在数据结构上操作)。没有明确的目标,你的问题毫无意义。