草庐IT

wake_locks

全部标签

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

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

c++ - 是否有任何惯用的显式使用 mutex::lock() 或 unlock()?

推荐的使用方式mutex用于锁定代码的关键区域是通过RAII,即mutex_typemutex;{//startofcriticalregionstd::lock_guardlock(mutex);//firststatementincriticalregion//...docriticalstuff,maythrowanexception}//endofcriticalregion这样当在临界区内抛出异常时,互斥量仍将被解锁(由std::lock_guard的析构函数)。然而,这样的成员mutex::lock()和mutex::unlock()永远不会被用户代码显式调用。Qmutex

c++ - Effective placement of lock_guard - 来自 Effective Modern C++ 的第 16 条

在第16项:“使const成员函数线程安全”中有一段代码如下:classWidget{public:intmagicValue()const{std::lock_guardguard(m);//lockmif(cacheValid)returncachedValue;else{autoval1=expensiveComputation1();autoval2=expensiveComputation2();cachedValue=val1+val2;cacheValid=true;returncachedValue;}}//unlockmprivate:mutablestd::mute

c++ - std::lock 仍然导致死锁

std::lock是用来防止死锁的吧?但是在我的测试中,它仍然导致死锁。你能检查一下我的测试代码,看看我是否使用错误吗?std::mutexm1;std::mutexm2;voidfunc1(){std::unique_locklock1(m1,std::defer_lock);printf("func1lockm1\n");std::this_thread::sleep_for(std::chrono::seconds(2));std::unique_locklock2(m2,std::defer_lock);printf("func1lockm2\n");std::lock(m1,

c++ - 使用 try_lock boost 锁定

我正在尝试解决Boost1.46.1的锁定问题-我尝试了一些方法但我不满意-因此很想听听干净的意见。线程A:必须始终等待并获取关键数据部分的锁更新一些关键数据手动解锁(或范围)线程B-绝不能阻塞(try_lock?)-如果获得锁,从提到的关键部分读取数据我不确定我是否需要shared_lock或者我是否可以用其他方式解决这个问题。编辑,我的代码如下:线程A:{//Criticalsectionboost::mutex::scoped_locklock(_mutex);}线程B:boost::mutex::scoped_locklock(_mutex,boost::try_to_lock

c++ - std::mutex::try_lock 虚假地失败?

也许I'mmisunderstanding关于std::mutex::try_lock:即使互斥量当前未被任何其他线程锁定,此函数也允许虚假地失败并返回false。这意味着如果没有一个线程锁定那个mutex,当我尝试一个try_lock时它可能返回false?为了什么目的?try_lock函数是否在锁定时返回falseOR如果没有人锁定它则返回true?不太确定我的非母语英语是否在愚弄我...... 最佳答案 Thismeansthatifnoonethreadhasalockofthatmutex,whenItryatry_loc

c++ - pthread_mutex_lock 上的段错误

当我尝试这样做时出现段错误pthread_mutex_lock(&_mutex).这真的很奇怪,我不确定是什么原因造成的。我已经在构造函数中初始化了_mutexpthread_mutex_init(&_mutex,NULL).有什么我能做的吗? 最佳答案 解决了,我对此很恼火。我想将Producer*作为参数发送给Pthread运行的函数,所以我使用了&(*iter),其中iter是在生产者vector上运行的迭代器。我几乎没有注意到它(理所当然地)是一个vector,这意味着我一直在发送Producer**,它产生了未定义的结果。

c++ - Fedora 22 - 编译 - __atomic_is_lock_free

我尝试在Fedora22上编译一个软件(SuperCollider),但我遇到了一个问题:libsupernova.a(server.cpp.o):Infunction`std::atomic::is_lock_free()const':/usr/include/c++/5.1.1/atomic:212:undefinedreferenceto`__atomic_is_lock_free'collect2:error:ldreturned1exitstatusserver/supernova/CMakeFiles/supernova.dir/build.make:96:recipefo

c++ - 为什么我们应该将 `std::unique_lock` 放在本地范围内?

基于C++EquivalenttoJava'sBlockingQueuevoidpush(Tconst&value){//originalversion{std::unique_locklock(this->d_mutex);d_queue.push_front(value);}this->d_condition.notify_one();}voidpush(Tconst&value){//myquestion//{//commentoutthescopestd::unique_locklock(this->d_mutex);d_queue.push_front(value);//}/

c++ - boost::scoped_lock 不适用于局部静态变量?

我制作了以下示例程序来使用boost线程:#pragmaonce#include"boost\thread\mutex.hpp"#includeclassThreadWorker{public:ThreadWorker(){}virtual~ThreadWorker(){}staticvoidFirstCount(intthreadId){boost::mutex::scoped_lock(mutex_);staticinti=0;for(i=1;i主类://ThreadTest.cpp#include"stdafx.h"#include"boost\thread\thread.hpp