草庐IT

LOCK指令前缀

全部标签

c++ - GNU _M_ 前缀背后的心态

如果我们看一下GNU的libstdc++实现,我注意到在标准类的实现中,各种类的private成员函数都带有前缀_M_.例如,std::basic_string其中有一个成员叫bool_M_is_shared()const;.我理解为私有(private)成员变量制定某种命名约定的动机。这有助于从视觉上区分类成员和函数局部变量。但我不明白为什么_M_私有(private)成员函数首选前缀。如果我看到一些调用的代码,例如:is_shared();基本上只有几个选项:是这个类的成员函数是父类的成员函数这是一个全局函数。前两个都有前缀,所以没用。由于namespace污染问题,最后一个不会在

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

无需在 VS 2013 中包含指令 "math.h"即可使用 C++ 数学函数

我很好奇为什么我可以在不包含“math.h”的情况下使用C++中的数学函数。我无法通过Google搜索找到答案。这是我正在执行的简单代码。一切都在编译和运行。#includeusingnamespacestd;intmain(){constfloatPI=acosf(-1);cout 最佳答案 允许任何标准header包含任何其他标准header。 关于无需在VS2013中包含指令"math.h"即可使用C++数学函数,我们在StackOverflow上找到一个类似的问题:

C++:具有 `std::lock_guard` 的互斥量是否足以同步两个 `std::thread`?

我的问题是基于下面的C++代码示例#include#include#include#includeclassClassUtility{public:ClassUtility(){}~ClassUtility(){}voiddo_something(){std::coutlock(g_mutex);std::coutlock(g_mutex);std::cout如果需要,这更像是一个问题,目的是让我的理解更清楚,并获取std::condition_variable的示例用法。我有2个C++std::thread,它们在main方法中启动。它是osx上的控制台应用程序。所以使用clang编

c++ - 输出指针的 const 前缀

我有一段C++代码,我觉得有点困惑:intfoo(constchar*&bar)在这种情况下,如果我想将条形指针写入为:bar=...没关系。那么我应该如何理解这个const。const指针与指针指向const值有何不同? 最佳答案 const适用于它左边的任何东西,除非它左边没有任何东西,在这种情况下它适用于它右边的任何东西。这意味着在您的情况下,bar是对指向constchar的指针的引用。bar本身不是常量,可以修改。如果您将bar更改为char*const&bar,即-对指向char的常量指针的引用,您将不会无法完成该任务。

c++ - 指令嵌套#pragma omp 的正确用法

在应用OpenMP并行化之前,以下代码运行起来非常顺利。事实上,下面的代码处于死循环状态!我确信这是由于我对OpenMP指令的不正确使用造成的。你能告诉我正确的方法吗?非常感谢。#pragmaompparallelforfor(intnY=nYTop;nY180||dLat>180){continue;}if(Navigation.GeoToXY(dX,dY,dLon,dLat,0)>0){continue;}//SkipvoiddatascanlinedY=dY-nScanlineOffset;//Computecoefficientsaswellasitsfourneighbori

c++ - 为什么某些局部类型声明在 C++ 中以 'struct' 为前缀

我经常看到这样的C++代码:voidfoo(){structsockaddr*from;//...}为什么需要struct说明符?它真的有作用吗?编译器已经可以知道sockaddr被声明为一个结构,所以我想知道为什么这是有用的或必要的。我过去曾尝试删除它,但没有注意到行为上的差异,但我不确定删除它是否安全。同样,这两者有什么区别?sizeof(structsockaddr)sizeof(sockaddr) 最佳答案 作为一种编码“风格”,这很可能是C的继承,其中关键字是必需的。在C++中,大多数情况下不需要这样做,尽管有时会使用它来

c++ - 在 Visual Studio 中检测 SSE/SSE2 指令集的可用性

如何在代码中检查VisualStudio编译器是否启用了SSE/SSE2?我已经尝试过#ifdef__SSE__但它没有用。 最佳答案 关于_M_IX86_FP的一些附加信息。_M_IX86_FP仅为32位代码定义。64位x86代码至少有SSE2。您可以使用_M_AMD64或_M_X64来确定代码是否为64位。#ifdef__AVX2__//AVX2#elifdefined(__AVX__)//AVX#elif(defined(_M_AMD64)||defined(_M_X64))//SSE2x64#elif_M_IX86_FP==

c++ - 如何通过反汇编从 C++ 函数中获取 "lea"指令?

我正在尝试学习逆向工程,但我被这件小事困住了。我有这样的代码:.text:10003478moveax,HWHandle.text:1000347Dleaecx,[eax+1829B8h]我想知道,它在C或C++中看起来如何?尤其是箭头所指的两条指令。HWHandle是一个变量,它保存从GetModuleHandle()函数返回的值。更有趣的是,在这条指令下面的几行中,dword_1000FCA0被用作一个函数:.text:1000353Cmoveax,dword_1000FCA0.text:10003541movecx,[eax+0A0h].text:10003547pushoffs