草庐IT

c++ - 可升级的读/写锁 Win32

我正在寻找具有pthreadsrwlock行为的win32可升级读写锁,其中可以升级和降级读锁。我想要的:pthread_rwlock_rdlock(&lock);...read...if(somecondition){pthread_rwlock_wrlock(&lock);...write...pthread_rwlock_unlock(&lock);}...read...pthread_rwlock_unlock(&lock);posix不需要升级行为,但它适用于linuxonmac。目前,我有一个可升级的工作实现(基于一个事件、一个信号量和一个关键部分),但是当读者处于事件状态

c++ - Boost 1.48.0 upgrade_to_unique_lock on Linux : Has something changed since 1. 47 还是我做错了什么?

我有一个小cppsource和hsource一些类的文件。它使用sharedmutexesandsharedlocks.它使用boost1.48.0在Windows上编译时没有错误。它还在linux上编译(之前使用boost1.47)。但是现在有这样的代码:boost::shared_mutexmut_;//...boost::upgrade_locklock(mut_);boost::upgrade_to_unique_lockuniqueLock(lock);导致奇怪的错误:====Buildingcf-fs(debug)====Creatingbin/obj/Debug/cf-f

c++ - 是否有用于 boost::interprocess 的 'upgrade_to_unique_lock'?

我正在寻找在偏向编写器读取器/编写器模型中的两个(或多个)进程之间有效共享数据block的最佳方法。我当前的测试是使用boost::interprocess。我已经创建了一些managed_shared_memory并试图通过使用存储在共享内存中的进程间互斥来锁定对数据block的访问。但是,即使在读取器上使用sharable_lock并在写入器上使用upgradable_lock时,客户端在写入操作期间将读取碎片值而不是阻塞。在单个进程中的线程之间进行类似的读写器设置时,我使用upgrade_to_unique_lock来解决这个问题。但是,我还没有找到它的boost::interp

c++ - "std::map with mutexes"与 "libcds maps (Michael Hashmap and Split Order List)"并行插入、查找、删除之间是否有任何速度测试?

所以我真的很想看到一些并行的速度测试(比如从100到10000个并行线程),其中每个线程至少在3种类型的并发映射上插入、查找、删除-std::map(有一些互斥锁)与libcds(ConcurrentDataStructures)...例如,如果这样的比较尚不存在,请帮助我创建一个。直接相关:LibCds:MichaelHashmapandSplitOrderList假设我们有#include#include#includeclassTestDs{public:virtualboolcontainsKey(intkey)=0;virtualintget(intkey)=0;virtua

c++ - boost::lock 在 boost 1.53 中无法编译

我正在编译一个项目。它有以下几行:boost::mutex::scoped_lockml(m_meta_mut,boost::defer_lock);boost::mutex::scoped_locktl(m_tables_mut,boost::defer_lock);boost::lock(ml,tl);我在第三行收到lockisnotamemberofboost。我用的是boost1.53(项目推荐1.49)问题是什么 最佳答案 将我的评论变成更完整的答案。boost::lock()功能是definedinboost/threa

c++ - 使用 MSVC 编译的多线程应用程序在运行时失败

我已经实现了一个循环运行提供的函数的类。//Timer.h#include#include#includeclassTimer{public:Timer(conststd::chrono::millisecondsperiod,conststd::function&handler);~Timer();voidStart();voidStop();boolIsRunning()const;private:conststd::function&handler;conststd::chrono::millisecondsperiod;boolisRunning=false;mutablest

c++ - Reader Writer Lock 支持低优先级的写者

我正在尝试寻找(或实现)支持低优先级写入器的读取器/写入器锁,但未能成功研究任何现有解决方案。我所说的低优先级写入器的意思是:“将让位给即将到来的读者或普通写入器”。如果有持续不断的读者流,肯定会导致饥饿,但这可以通过定时锁变体(“尝试定时低优先级写入器锁”,然后在超时时切换到正常锁)或通过更改来解决读取器的发布方式(可能会定期暂停读取一小段时间)。如果有任何文献描述这些东西,我还没有找到。如果有利用常规锁的已知(正确!)解决方案,我将不胜感激。 最佳答案 我不知道有什么100%像你的建议,但有一些现有的接口(interface)很

c++ - Concurrent_hash_map 实现抛出 SIGSEGV

我正在尝试使用tbb的concurrent_hash_map来提高我的应用程序的并发性能。阅读它并根据我的应用程序实现它,但我看到崩溃..因此,我的应用程序是一个多线程应用程序,我在其中存储对,键是char*,值是整数。伪代码如下所示:在.h文件中,typedeftbb::concurrent_hash_maptbb_concurrent_hash;tbb_concurrent_hashconcurrent_hash_table;tbb_concurrent_hash::accessorwrite_lock;tbb_concurrent_hash::const_accessorread

c++ - C++ 中的公平读写器票证自旋锁运行缓慢

我最近用C++实现了一个公平的读写器票证自旋锁。代码相当简单,我认为它运行良好。我已经将自旋锁集成到一个更大的应用程序中,我注意到在极少数情况下,代码运行非常缓慢,而大多数时候,它运行得非常快。我知道这是由于自旋锁引起的,因为如果我立即用一个简单的读写器自旋锁替换它(不公平且没有票),代码突然运行得更快。它在不同的机器上发生了几次。我知道如果你用比内核更多的线程运行这些锁,它们会运行得很慢,但我在一台有48个内核的机器上用16个线程运行它。我无法在具有4个线程和4个内核的笔记本电脑上重现该问题。这是代码:inlinesize_trndup(size_tv){v--;v|=v>>1;v|

c++ - QReadWriteLock递归

我在递归模式下使用QReadWriteLock。这段代码本身没有意义,但我遇到的问题是从这里产生的:lock->lockForWrite();lock->lockForRead();lockForRead被阻止。请注意,这是递归模式。我的看法是Write是一个“高级”锁,它允许我读取和写入protected数据,而Read锁只允许读取。此外,我认为如果请求写锁的唯一读者是同一个读者,则不应阻止写锁。我可以从qreadwritelock.cpp源代码中看到,没有尝试让它像我想要的那样工作。所以这不是错误,而是我发现缺少的功能。我的问题是,应该允许这种递归吗?这种实现方式会产生什么问题吗?