草庐IT

c++ - 使用互斥量来阻止从临界区外执行

我不确定我的术语是否正确,但这里是-我有这个函数被多个线程用来写入数据(在注释中使用伪代码来说明我想要什么)//theseareinitiatedintheconstructorint*data;std::atomicsize;voidwrite(intvalue){//waitherewhile"read_lock"//set"write_lock"to"write_lock"+1autoslot=size.fetch_add(1,std::memory_order_acquire);data[slot]=value;//set"write_lock"to"write_lock"-1

c++ - 常量和非常量仿函数

这似乎是应该经常问和回答的问题,但我的搜索失败了。我正在编写一个函数,我想接受某种通用的可调用对象(包括裸函数、手动仿函数对象、bind或std::function),然后在算法的深度(即lambda)中调用它。函数当前声明如下:templatesize_tdo_something(constT&a,constF&f){Tinternal_value(a);//dosomecomplicatedthings//loop{//loop{f(static_cast(internal_value),other_stuff);//dosomemorethings//}//}return42;}

c++ - AVX 中的矩阵向​​量乘法并不按比例比 SSE 中快

我正在使用以下代码在SSE和AVX中编写矩阵vector乘法:for(size_ti=0;i我对AVX使用了类似的方法,但是最后,由于AVX没有与_mm_store_ss()等效的指令,我使用了:_mm_store_ss(&C[i],_mm256_castps256_ps128(sum));SSE代码比串行代码提速3.7。然而,AVX代码只比串行代码快了4.3。我知道将SSE与AVX一起使用会导致问题,但我使用g++使用-mavx'标志编译它,这应该会删除SSE操作码。我也可以使用:_mm256_storeu_ps(&C[i],sum)来做同样的事情,但加速是一样的。关于我还可以做些什

c++ - 字符串字面量引用类

这个问题在这里已经有了答案:DifferentiateStringLiteralfromCharArray(3个答案)关闭6年前。在C++1y中,我能否有一个绑定(bind)到字符串文字但不绑定(bind)到char*或char[]&或类似的?classLitRf{constchar*data_;size_tsize_;public:LitRf(constchar*/*?*/s):data_{s},size_{sizeof(s)}{/*?*/}};

c++ - 通过从 const 函数引用调用另一个类的非常量函数

这个问题在这里已经有了答案:WhycanIcallanon-constmemberfunctionpointerfromaconstmethod?(5个答案)关闭3年前。想象一下下面的例子:classA{public:voiddoSomeStuff(){std::cout如果doSomeStuff()会更改数据,那不会也影响classB吗?为什么允许这种行为?

c++ - 如果我定义带有非常量参数的复制构造函数和 operator= ,我仍然会得到默认的复制构造函数和 operator= 吗?

在C++中,如果我定义了一个复制构造函数和operator=,它采用对该类的非const引用,编译器是否仍应为const引用提供默认版本?structTest{Test(Test&rhs);Test&operator=(Test&rhs);private://DoIstillneedtodeclarethesetoavoidautomaticdefinitions?Test(constTest&rhs);Test&operator=(constTest&rhs);}; 最佳答案 不,如果你定义一个复制构造函数和赋值运算符,编译器不会

c++ - 返回常量对象并将其分配给非常量对象

我发现一段代码的奇怪行为显然忽略了const-ness:#includeusingstd::cerr;classA{public:A(){cerr首先,我在这里确实期望:a是一个常量,因此调用get()的常量版本。接下来返回常量对象,但是左边是非常量对象b,所以应该调用拷贝构造函数。哪个不是:A::A()constAA::get()constA::A()A::~A()A::~A()这种行为是C++标准所期望的吗?那么,临时对象的常量性是否可以被RVO简单地忽略?以及如何在此处强制执行复制?禁用复制省略的输出(-fno-elide-constructors)进行额外的移动和预期的复制构造

c++ - 提供非常量引用 getter 是否有意义

有时我需要暴露一些类(class)成员。例如在下面的例子中classMechanic可能需要直接访问Engine组件。由于多种原因,我已经多次读到所有字段都应该通过mutator(访问器)方法访问。但是在提供非const引用getter时有什么优势吗:classCar{public:Engine&engine(){returnm_engine;}//asaconsequenceyouwillalsoneedtoprovideconstversionconstEngine&engine()const{returnm_engine;}private:Enginem_engine;}简单地公

c++ - 共享互斥量是否比相对较大结构的原子更有效?

假设我有一个看起来像这样的类(实际上正是这个大小):classK{public:longlongget_x()const;//lockm_mutexinshared/read-onlymodevoidupdate(longlongw);//lockm_mutexwithaunique_lockprivate:longlongm_a;longlongm_b;longlongm_c;longlongm_x;doublem_flow_factor;mutableboost::shared_mutexm_mutex;};如您所见,这应该是线程安全的。更新函数一次被一个线程调用,未知但只有一个线

c++ - C++ 中的互斥量必须绑定(bind)到某个对象或变量吗?

我对线程有点陌生,我想了解它在C++11中的工作原理。我类的教授给了我们这个示例代码来演示互斥锁的使用:#include#include#includestd::listsome_list;//Adatastructureaccessedbymultiplethreadsstd::mutexsome_mutex;//Thislockwillpreventconcurrentaccesstotheshareddatastructurevoidadd_to_list(intnew_value){std::lock_guardguard(some_mutex);//SinceIamgoing