问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux怎么把文件同时进行读写锁

发布网友 发布时间:2022-04-30 05:13

我来回答

2个回答

热心网友 时间:2022-06-23 11:15

读写锁与互斥量类似,不过读写锁的并行性更高。
读写锁可以有三种状态:(1)读模式加锁;(2)写模式加锁;(3)不加锁。
在写加锁状态时,在解锁之前,所有试图对这个锁加锁的线程都会被阻塞。在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权限。但是如果线程希望以写模式加锁,它必须阻塞,直至所有的线程释放读锁。
读写锁很适合于对数据结构读的次数远大于写的情况。

相关函数:
int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock) // 成功则返回0,失败则返回错误代码
int pthread_rwlock_rdlock(pthread_rwlock_t *restrict rwlock) ;//读模式加锁
int pthread_rwlock_wrlock(pthread_rwlock_t *restrict rwlock);//写模式加锁
int pthread_rwlock_unlock(pthread_rwlock_t *restrick rwlock);
int pthread_rwlock_tryrdlock(pthread_rwlock_t *restrict rwlock);
int pthread_rwlock_trywrlock(pthread_rwlock_t *restrict rwlock);
int pthread_rwlock_trywrlock(pthread_rwlock_t *restrict rwlock);
相关示例:读者写者问题,这也是一个很经典的多线程题目,题目大意:有一个写者多个读者,多个读者可以同时读文件,但写者在写文件时不允许有读者在读取文件,同样有读者读文件时
#include <stdio.h>
#include <pthread.h>

#define Read_Num 2

pthread_rwlock_t lock;

class Data
{
public:
Data(int i, float f): I(i),F(f)
{}
private:
int I;
float F;

};

Data *pdata = NULL;

void *read(void * arg)
{
int id = (int)arg;
while(true)
{

pthread_rwlock_rdlock(&lock);
printf(" reader %d is reading data!\n", id);
if(data == NULL)
{
printf("data is NULL\n");
}
else
{
printf("data: I = %d, F = %f \n", pdata->I, pdata->F);
}
pthread_rwlock_unlock(&lock);
}

pthread_exit(0);

}

void *write()
{
while(true)
{
pthread_rwlock_wrlock(&lock);
printf(" writer is writind data!\n");
if(pdata == NULL)
{
pdata = new Data(1, 1.1);
printf("Writer is writing data: %d, %f\n", pdata->I, pdata->F);
}
else
{
delete pdata;
pdata = NULL;
printf("writer free the data!");
}

pthread_rwlock_unlock(&lock);
}
pthread_exit(0);
}

void main()
{
pthread_t reader[Read_Num];
pthread_t writer;

for(int i = 0;i<Read_Num;i++)
{
pthread_create(&read[i],NULL,read,(void *)i);
}

pthread_create(writer, NULL, write, NULL);

sleep(1);
return 0;
}

热心网友 时间:2022-06-23 11:16

chmod 600 test.php
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
请问信用卡暂未批准是什么意思 短发搭配什么帽子能吸睛?get下文各种短发的搭配攻略 入门智能机vivoy200t怎么样? 直短发配什么帽子好看 老狗狗为什么总低头 脚跟骨裂做了手术还装了钢板,请问要多长时间才能恢复。 脚跟粉碎性骨折术后多久能走路 脚跟骨折多久可以正常走路 如图,AD是∠BAC的平分线,点E在AB上,且AE=AC,EF ∥ BC交AC于点F.试说明... 如图,AD是角BAC的平分线,点E在AB上,且AE=AC,EF//BC交AC于点F.求证:EC... linux shell中的加锁 适合跑步通勤耳机 TP-LINK 11AC双频无线路由器1750M穿墙6天线wifi TL-WDR7800好吗? 想换个无线路由,华硕ac88u与网件r7800这两款哪个信号比较强硬件比较高 TP-Link WDR7800为主路由器,TP-Link WR886N为副路由器,求桥接方法 网件路由器7800手机怎样设置 普联路由器7800怎么样 换个千兆路由,TL-WDR7500和TL-WDR7800哪个好 tp-wdr7800千兆版和荣耀路由Pro哪个好,信号和稳定 7800怎么设置WIFI信号好 WDR7800无线路由器可以设置MAC绑定吗? 目前丹麦曲奇饼在中国是怎么样一个状态?每次去超市都会发现丹麦曲奇饼有不同产地,谁能帮忙解释一下? Kjeldsens butter cookies 的中文名字是丹麦蓝罐曲奇, 怎麼变成皇冠曲奇?皇冠曲奇是印尼的。 曲奇饼广告语 梦见坐车遇到坏人摸我,然后求救了,可是下车要跟踪我是什么意思 丹麦蓝罐曲奇那句广告词是什麽?? 梦见坐火车,车上有僵尸吸血。吓的到一个叫庄河的位置跳车。还梦见自己去世的爸爸和爷爷在家里。我说卡和 梦见自己乘的车被劫持自己跳车逃了报警 梦见被追,被追杀。昨晚梦见自己坐车回老家,可是上车后,才发现坐我旁边的感觉是坏人,然后,换座位,可 能帮我做几个花藤体的网名吗?文字是“逐月”“追风” linux锁定文件 为什么在linux上对某个文件加锁还是可以rm掉 linux 生成的.o文件为什么带锁标志 访问linux高手,有一个给文件添加密码的命令是:设置密码 [root@localhost ~]# &#47;opt&#47;lampp&#47;lampp security 晚上做梦梦到自己用刀砍死了一大一小两条蛇是怎么回事呀? 梦见两条蛇一大一小在蹲便里爬出,将其打死,寓意着什么 梦见亲人杀了一大一小两条蛇斩成几段有很多血周公解梦 梦里梦见蛇一大一小大的被打死 梦见两条一大一小的蛇,被自己打死了,却又复活反来吃我 昨天晚上做个奇怪的梦梦见一深一浅两条大蛇加一小蛇我把小蛇打死了? 先是梦见几只小鹰,然后梦见一条大而凶猛的毒蛇,最后我打死了一大一小的两条蛇,这梦是什么意思? eversleeping的歌词? Eversleeping的中文歌词,xandria唱的 &quot;eversleeping&quot;歌词的中文意思 谁有Eversleeping 的中文歌词? 求Eversleeping - Xandria的中文歌词, Eversleeping Xandria Ravenheart歌词及翻译 Eversleeping是什么中文意思?有歌词吗? 好想知道eversleeping的中文翻译哦 有首英文歌,女生唱的,其中一句歌词是everynight i feel you in my dream