gpt4 book ai didi

c++ - 高效读取共享资源

转载 作者:可可西里 更新时间:2023-11-01 11:28:34 25 4
gpt4 key购买 nike

我有多个线程,这些线程中的任何一个都可以写入由任何其他线程访问的字符串。

我不能同时写入和读取,但我看不出有什么理由不能从两个不同的线程读取同一个资源两次。

在 C++ 中,我如何允许对字符串进行异步读取,而不允许同时进行异步写入和读取?

我设想我会以某种方式等待 Mutex 的所有权,并以某种方式让其他读取操作知道拥有线程正在执行读取操作而不是写入操作,因此它也可以读取,但我不能不要真的在某处放置一个简单的标志说“我正在阅读”,因为一旦第二次读取由于该标志而忽略互斥锁,第一次读取操作将退出并且在执行第二次读取操作时可能会发生写入操作。

我不知道该怎么做。

最佳答案

这被称为 The Readers-Writers Problem .

我想一旦您了解了这一点,就应该很容易确定解决方案。事实上,链接的文章介绍了其中的一些。

semaphore wrt=1, mutex=1;
readcount=0;

writer()
{
wait(wrt);
// Writing is done
signal(wrt);
}

reader()
{
wait(mutex);
readcount++;
if (readcount == 1)
wait(wrt);
signal(mutex);
// Do the Reading
// (Critical Section Area)
wait(mutex);
readcount--;
if (readcount == 0)
signal(wrt);
signal(mutex);
}

复制了防止(不太可能)链接失效的解决方案之一

关于c++ - 高效读取共享资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26956777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com