小编pok*_*che的帖子

为什么add函数在c ++ 11 thread中没有效果?

我正在尝试学习c ++ 11线程并拥有以下代码:

#include <iostream>
#include <thread>
#include <vector>
#include <mutex>
#include <algorithm>

void add(int&  i){
    std::mutex some_mutex;
   // std::cout << " I am " << std::endl;
    std::lock_guard<std::mutex> guard(some_mutex); 
    i++;
}


int main(){
    int i = 0;
    std::vector<std::thread> vec_threads;

    for(int i = 0; i < 10; i++){
        vec_threads.push_back(std::thread(add,std::ref(i)));
    }

    std::for_each(vec_threads.begin(),vec_threads.end(),
            std::mem_fn(&std::thread::join));
    std::cout<< " i = " << i << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个vectorhold std::thread,我从每个线程调用add函数并通过ref传递i.在我假设线程会做(添加i = i+1)之后,最终结果并不反映我想要的.


输出:i = 0

预期产出:i = 10

c++ multithreading c++11 stdthread output

13
推荐指数
1
解决办法
990
查看次数

c ++中的线程序列化是什么意思?

我知道序列化对象以及如何将它们保存到磁盘,但线程序列化实际上意味着什么?有没有人可以帮我解决这个问题并指出我正确的方向?

c c++ multithreading pthreads

10
推荐指数
2
解决办法
3886
查看次数

是分配内存rvalue表达式还是左值表达式的表达式?

假设我有以下代码

int main(){
    new int; // Is this expression l-value or r-value??

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

我知道左值是持久对象(因为它在内存中具有特定的位置,即使在表达式结束后我们也可以访问后者)并且rvalues是临时对象(它在内存中没有位置并且在表达式结束后蒸发).

我看到了一些rvalue表达式.如果表达式返回一个地址(内存中的特定位置),它怎么能是rvalue.或者它是否是rvalue因为表达式new int返回(地址值),它会消失,并且在表达式结束后永远不会被捕获.

c++

10
推荐指数
1
解决办法
325
查看次数

为什么setImageBitmap对自定义ImageButton没有影响?

我找到了这个链接,说明我如何在我的身上发光效果ImageButton.因此,只要用户按下ImageButtononTouchEvent()功能被称为有我所说的setImageBitmap()功能.问题是这个函数(setImageBitmap())似乎根本没有效果.

什么有效:

1)到目前为止,我扩展ImageButton如下

// Pen.java
public class Pen extends ImageButton {
    public Pen(Context context, AttributeSet attrs) {
        super(context, attrs);  
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        System.out.println("Now I am setting  Pen");
        return true;
    }


}
Run Code Online (Sandbox Code Playgroud)

然后在Activity I中创建Pen(自定义ImageButton)实例,从实例定义setGlow()和调用.setImageBitmap()Pen

//MainActivity.java

public class MainActivity extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Pen myImgbutton; 
        myImgbutton = (Pen) findViewById(R.id.pen); …
Run Code Online (Sandbox Code Playgroud)

android bitmap bitmapimage android-drawable android-bitmap

8
推荐指数
3
解决办法
380
查看次数

单个CMakeLists.txt足以支持我的项目?

我试图将我的旧CMake移植到现代CMake(CMake 3.0.2或更高版本).在旧设计中,我有多个CMakelists.txt,每个目录都包含一个CMakeLists.txt文件.

我当前项目的目录结构如下:

.
??? VizSim.cpp
??? algo
??? contacts
?   ??? BoundingVolumeHierarchies
?   ?   ??? AABBTree.h
?   ??? SpatialPartitoning
??? geom
?   ??? Geometry.h
??? math
?   ??? Tolerance.h
?   ??? Vector3.cpp
?   ??? Vector3.h
??? mesh
?   ??? Edge.h
?   ??? Face.h
?   ??? Mesh.cpp
?   ??? Mesh.h
?   ??? Node.h
??? util
|   |__ Defines.h
|   |__ Math.h
|
??? viz
    ??? Renderer.h
Run Code Online (Sandbox Code Playgroud)

我打算做的只是使用一个CMakelists.txt并将所有cpp文件放在SOURCE中,并将所有标题放在HEADER中并使用add_executable.

set (SOURCE
    ${SOURCE}
    ${CMAKE_CURRENT_SOURCE_DIR}/src/mesh/Mesh.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector3.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/VizSim.cpp
    ....
)

set (HEADER
    ${HEADER}
    ${CMAKE_CURRENT_SOURCE_DIR}/src/mesh/Mesh.h
    ${CMAKE_CURRENT_SOURCE_DIR}/src/math/Vector3.h …
Run Code Online (Sandbox Code Playgroud)

cmake

7
推荐指数
1
解决办法
436
查看次数

linux 用户级(pthread)线程是否在多核上运行?

我知道有:

1) 用户级线程 - 在进程的相同地址空间内,但具有不同的堆栈。

2)内核级线程 - 在内核内存堆栈内部(我在这里猜测)。

所以当我创建用户级线程时,内核不知道它们[1]。那么内核如何知道,如何调度不同内核中的不同用户级线程。这个问题是关于 pthread 的。如果 pthread 是用户级线程,它如何在多核上运行?

未来答案寻求者阅读:( 感谢所有贡献者)

1)Ziffusion的回答(下)

2)大卫施瓦茨的回答

3)教程点链接

c linux multithreading pthreads

6
推荐指数
1
解决办法
4581
查看次数

如何在课堂外返回枚举的向量?

让我们说A类有2d enum向量,我想在类之外访问这个2d向量并操纵该值.

我的问题是:如何声明新向量以保持类在类之外的返回值,因为我的类型(枚举类型)在类中?我希望有点像

A a(5);
std::vector<std::vector<A::s> > x = a.get_2dvec();
Run Code Online (Sandbox Code Playgroud)

但这给了我错误说它的私有然后如果我使类型公开我没有声明错误.

我知道我可以放置枚举{RED,BLUE,GREEN}; 和typedef的颜色; 在课外和实现结果但是让我们说主要是在不同的文件上.

 // f1.cpp

#include <iostream>
#include <vector>

class A{
    // This enum is inside class 
    enum s {RED, BLUE, GREEN};
    typedef s color;
    const int size = 3;
    std::vector<std::vector<color> > color_array;
public:
    A(int size_):size(size_),color_array(size){
        std::cout << "vector size  = " << color_array.size() << std::endl;
        for(int i = 0; i < size; i++){
            for(int j = 0; j < size; j++){
                color_array[i].push_back(RED);
            }
        }  
    }
    void print(){
        for(auto …
Run Code Online (Sandbox Code Playgroud)

c++ enums vector

4
推荐指数
1
解决办法
559
查看次数

如何表示c ++ struct中的每个mips指令行?

我正在尝试使用c ++模拟虚拟MIPS架构.在这个过程中,我必须将mips体系结构的每一行存储为struct并将其存储到vector中,这样我就可以模拟5个阶段的管道.我的问题是,我怎样才能代表每一条指令,例如:

Loop: ST R1 R2 //store to M[R2] the contents of R1
ADD R1 R2 R3  // R1 R2 and R3 are register
SUB R1 1
BRNZ  R1 Loop //if R1 is not 0 then loop
Run Code Online (Sandbox Code Playgroud)

每一行看起来都不同,我试图找到一种在struct中表示这种情况的通用方法.

c c++ mips computer-architecture

3
推荐指数
1
解决办法
926
查看次数

如何在链表中对析构函数进行递归调用?

我正在阅读这篇博客文章,并发现了这段代码.

#include <iostream>
#include <string>

using namespace std;

struct LNode {
   int data;
   LNode* next;

   LNode(int n){data = n; next = nullptr;}

   void add_to_end(int n) {
      if (next)
         next->add_to_end(n);
      else
         next = new LNode(n);
   }
   ~LNode() { cout << " I am from LNode Destructor " << endl; delete next; }
};

int main()
{   
   LNode root(1);
   root.add_to_end(2);
   root.add_to_end(3);
   root.add_to_end(4);

}
Run Code Online (Sandbox Code Playgroud)

这段代码的输出是

 I am from LNode Destructor 
 I am from LNode Destructor 
 I am from LNode Destructor 
 I …
Run Code Online (Sandbox Code Playgroud)

c++

3
推荐指数
1
解决办法
3121
查看次数

智能指针的计数器递减如何工作?

下面是共享指针的示例代码。我在花括号范围内定义了一个共享指针。sp1 由新的 A(计数器 = 1)初始化,并将 sp1 分配给 sp2(复制和/或赋值将计数器加 1,因此计数器 = 2)。我一直认为当计数器变为 0 时会调用 A 的析构函数。但在我的情况下,智能指针即将超出范围(通过花括号)时,计数器为 2。

我的问题是:谁将计数器从 2 更改为 0?

#include <iostream>
#include <memory>

using namespace std;

class A{
public:
    ~A(){

        std::cout << "~A" <<  std::endl;
    }    
};
int main(){
    {
        shared_ptr<A> sp1 (new A); 
        shared_ptr<A> sp2 = sp1;

        std::cout << "sp1 count = " << sp1.use_count() << std::endl;
        std::cout << "sp2 count = " << sp2.use_count() << std::endl;
    }

return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑: 链接到智能指针上的论文

输出:


sp1 计数 …

c++ smart-pointers shared-ptr

2
推荐指数
1
解决办法
1036
查看次数