草庐IT

scoped-lock

全部标签

c++ - 为什么要把 std::lock 放在 std::lock_guard 之前

继续ConcurrencyInAction我已经达到了下面的例子。作者指出,如果我们每次都锁定2mutexes同样的顺序,那么我们保证避免deadlocks.考虑书中的这个例子:classX{private:some_big_objectsome_detail;std::mutexm;public:X(some_big_objectconst&sd):some_detail(sd){}friendvoidswap(X&lhs,X&rhs){if(&lhs==&rhs){return;}std::lock(lhs.m,rhs.m);std::lock_guardlock_a(lhs.m,

c++ - 为什么 std::lock() 支持避免死锁但 std::try_lock() 不支持?

我认为std::lock()和std::try_lock()之间的区别仅在于try_lock(),如果锁不可用,它将立即返回false,而在std::lock()的情况下,它将进入阻塞状态。Cppreferenceforstd::lockvoidlock(Lockable1&lock1,Lockable2&lock2,LockableN&...lockn);使用死锁避免算法锁定给定的Lockable对象lock1、lock2、...、lockn以避免死锁。Cppreferencebytry_lockinttry_lock(Lockable1&lock1,Lockable2&lock2,

c++ - Qt错误: `qApp' was not declared in this scope

据我所知,qApp是全局指针,因此它应该可以在任何地方访问,但我收到此错误error:qAppwasnotdeclaredinthisscope。1#include"textEdit.h"23TextEdit::TextEdit(){4}56voidTextEdit::insertFromMimeData(constQMimeData*source){7if(qApp->mouseButtons()==Qt::MidButton){8return;9}10QTextEdit::insertFromMimeData(source);11}1213 最佳答案

c++ - 初始化 boost::scoped_ptr 数组的正确方法?

我有一个类,其中有一个范围指针数组,这些指针指向没有默认构造函数的对象。我发现“初始化”它们的唯一方法是像这样使用swap():classBar{Bar(char*message){};}classFoo{boost::scoped_ptrarr[2];Foo(){arr[0].swap(boost::scoped_ptr(newBar("ABC")));arr[1].swap(boost::scoped_ptr(newBar("DEF")));};}这感觉有点冗长和笨拙。我错过了更聪明的方法吗? 最佳答案 arr[0].reset

c++ - 在带有 std::unordered_map 的 std::scoped_allocator_adaptor 中使用自定义分配器

我正在尝试将一个简单的内存池分配器与std::unordered_map一起使用。我在std::string和std::vector中似乎成功地使用了同一个分配器。我希望unordered_map(和vector)中包含的项目也使用此分配器,因此我将我的分配器包装在std::scoped_allocator_adaptor中。简化定义集:templateusingmm_alloc=std::scoped_allocator_adaptor>;usingmm_string=std::basic_string,mm_alloc>;usingmm_vector=std::vector>;us

The MySQL server is running with the LOCK_WRITE_GROWTH option so it cannot execute this statement

今天发现mysql报错,记录下问题原因;错误信息:TheMySQLserverisrunningwiththeLOCK_WRITE_GROWTHoptionsoitcannotexecutethisstatement向aliyun写入数据,报错。阿里云的一个保护策略,空间剩余不足时,禁止数据写入;可用navicat执行以下sql查看剩余空间大小;SELECTTABLE_SCHEMA,concat(TRUNCATE(sum(data_length)/1024/1024,2),‘MB’)ASdata_size,concat(TRUNCATE(sum(index_length)/1024/1024,

c++ - -O1/2/3 与 -std=c++1y/11/98 - 如果包含 <cmath> 我收到错误 : '_hypot' was not declared in this scope

我刚刚使用mingw-get-setup更新了MinGW而且我无法构建包含的任何内容header如果我使用大于-O0的东西与-std=c++1y.(我也试过c++11和c++98)我收到这样的错误:g++.exe-pedantic-errors-pedantic-Wextra-Wall-std=c++1y-O3-cZ:\Projects\C++\L6\src\events.cpp-oobj\src\events.oInfileincludedfromz:\lander\mingw\lib\gcc\mingw32\4.8.1\include\c++\cmath:44:0,fromZ:\P

c++ - "Locking"两个 vector 并对它们进行排序

这个问题在这里已经有了答案:HowcanIsorttwovectorsinthesameway,withcriteriathatusesonlyoneofthevectors?(9个回答)关闭8个月前。我有这两个vector的mass和velocity大小相同N.它们包含有关N个粒子的质量和速度的信息。mass[i]和velocity[i]因此是第i个粒子的属性在C++中是否可以将这两个vector“锁定”在一起并按质量递增的顺序对它们进行排序?因此,在对vectormass进行排序之后应按升序排列,速度vector应包含排序质量的相应速度例如在排序质量=(4,2,1,3)和速度=(1

c++ - 我是否必须使用 weak_ptr.lock() 来测试它是否指向有效对象?

创建一个临时的shared_ptr只是为了查看weak_ptr是否指向一个有效的对象似乎有点低效。我什至不想访问该对象。这是因为我有一个从shared_ptrvector返回weak_ptr的函数,如果它返回一个空的weak_ptr那么这意味着该对象不存在该GUID。所以我只是在测试一个对象是否存在。有没有另一种方法可以在不创建shared_ptr的情况下检查weak_ptr是否为空? 最佳答案 您可以使用expired()成员函数。 关于c++-我是否必须使用weak_ptr.lock

c++ - 错误消息 : name lookup of ‘jj’ changed for ISO ‘for’ scoping,(如果您使用 ‘-fpermissive’,G++ 将接受您的代码)

错误是:Infunction‘intreturnShortestWeightedBranch(std::vector>*)’:error:namelookupof‘jj’changedforISO‘for’scopingnote:(ifyouuse‘-fpermissive’G++willacceptyourcode)代码是:for(inti=0;i这里可能是什么问题?编辑1:我更改了以下内容:for(intjj=0;jj到:intjj;for(jj=0;jj现在它正在工作!!我不明白原因。 最佳答案 内部for语句的末尾有一个分号