草庐IT

条件分支

全部标签

c++ - 访问队列数据结构的信号处理程序(竞争条件?)

我目前正在用C++编写一个小型shell。作业和与之关联的PID存储在作业指针队列中(job*)。运行新作业时,有关它的信息将添加到队列中。由于可以同时处理多个作业,并且可以随时在shell的控制台输入新作业,因此我有一个信号处理程序来等待终止的作业。当一个作业终止时,我需要从事件作业队列中删除它的信息并将其移动到我的已终止作业的双端队列中。但是,当另一个作业停止时,用户的新作业可能正在添加到队列中。在这种情况下,他们的insert队列操作将被暂停,我的信号处理程序将被调用,它将执行它的pop操作。我想了解如何解决这种潜在的竞争条件,因为我认为在此过程中可能会发生损坏。我不能使用互斥锁

根据多个在其中使用numpy的条件来更新数据框架值

我想改变DateWork['Variable']根据多个条件和更新的值DateWork['Date']如果Frequency=3和len(Variable)=6然后用“-0”替换M,然后更新DateWork['Date']如果Frequency=3和len(Variable)=7然后用“-”替换m,然后更新DateWork['Date']数据帧:日期工作FrequencyVariableDate31950M21950-02-0131950M31950-03-0121950-07-011950-07-0131950M91950-09-0121950-10-011950-10-0131950M10

C++14 Lambda - 通过引用或值有条件地捕获

是否可以根据编译时信息有条件地选择lambda的捕获方法?例如……automonad=[](auto&&captive){return[(?)captive=std::forward(captive)](auto&&a){return1;};};如果decltype(captive)是一个std::reference_wrapper,我想通过引用捕获,而其他一切都通过值捕获。 最佳答案 Lambda捕获类型不能由依赖于模板的名称控制。但是,您可以通过将创建内部lambda委托(delegate)给重载函数来达到预期的效果:templ

c++ - 避免基于作为模板参数的函数的返回值的分支

假设以下策略类负责算法的一个方面:structVoidF{staticvoidf(){...//somecodethathassideeffects}};structBoolF{staticboolf(){boolres=...;//somecomputationreturnres;}};BoolF策略是“增强感知”:当BoolF::f()返回true时,算法可以退出。VoidF是“增强意识”,因此它返回void(我不想强制我的图书馆的用户返回bool,因为这对他来说没有任何意义)。算法目前是这样写的:templatestructAlgorithm{voidrun(){...//som

c++ - 一个结构中的条件变量、互斥锁和标志

可以将所有三个变量合并到一个结构中吗?structlock_struct{std::mutexmutex;std::conditional_variablecv;boolflag;};这种方法是否存在任何隐藏的同步问题?我不打算修改结构本身,只修改它的字段。顺便问一下,我应该使用bool吗?或std::atomic在处理std::condition_variable时的旗帜?编辑:根据答案实现。classConditionLock{public:voidwait();voidnotify();boolgetFlag()const;private:mutablestd::mutex_mu

C++ - 检查所有成员变量的条件

我的情况的简化示例:我有一个类有3个成员变量,都是整数,例如classFoo{public:intA;intB;intC;};如果所有成员变量都为0,我想要一个返回bool值true的函数,否则返回false。很简单,可以用这个成员函数来完成:boolall_zero(){return(A==0&&B==0&&C==0);}如有必要,我可以这样做。但是,这在我的情况下并不理想,因为:我不是唯一管理此软件的人。偶尔,新的成员变量会被添加到这个类中(例如intD)。这是一个非常大的C++项目,我们通常不会通过手动修改代码直接向类中添加新的成员变量,而是使用自定义工具自动为我们修改代码。因此

c++ - 如果函数被称为 constexpr,则有条件地 static_assert

我知道有人提议使用constexpr()运算符,但这还没有在gcc/clang中实现。我也知道有一个使用机器代码编辑等技巧的实现:http://saadahmad.ca/detecting-evaluation-context-inside-constexpr-functions/我想知道是否有一个有点受限的解决方案:structF{constexprF(intv){ifconstexpr(constexpr()){static_assert(v>0);}else{assert(v>0);}}};//...constexprFf{0};//shouldtriggeracompile-t

c++ - 满足特定条件时如何防止 C++ 模板类方法的实例化?

我目前正在编写具有以下签名的通用vector模板类(几何实体,而不是容器)...templateclassvector{...}...其中T是算术类型,N是维度。我想将叉积定义为运算符^的重载(位于类定义内)并仅在N==3时启用它。我现在拥有的是:typenameboost::lazy_enable_if_c::typeinlineoperator^(constvector&rhs)const{vectorret;ret(0)=val_[1]*rhs(2)-val_[2]*rhs(1);ret(1)=val_[2]*rhs(0)-val_[0]*rhs(2);ret(2)=val_[0

c++ - 在 VS2012 中使用 C++11 条件变量

我无法让代码在一个简单的VS2012控制台应用程序中可靠地工作,该应用程序由使用C++11条件变量的生产者和消费者组成。我的目标是生成一个可靠的小程序(用作更复杂程序的基础),该程序使用3个参数wait_for方法,或者可能是我在这些网站上收集的代码中的wait_until方法:condition_variable:wait_for,wait_until我想将3个参数wait_for与如下所示的谓词一起使用,除非它需要使用类成员变量以便稍后对我最有用。运行大约一分钟后,我收到“访问冲突写入位置0x__”或“将无效参数传递给服务或函数”作为错误。steady_clock和第二个参数wai

c++ - 条件显式模板实例化

除了预处理器,我如何有条件地启用/禁用显式模板实例化?考虑:templatestructTheTemplate{/*blah*/};templatestructTheTemplate;templatestructTheTemplate;templatestructTheTemplate;templatestructTheTemplate;在某些编译条件下,Type3与Type1相同,Type4与Type2相同。发生这种情况时,我会收到错误消息。我想检测类型是否相同,而不是像中那样在Type3和Type4上实例化//thisdoesnotworktemplatestructTheTemp